151 votes

Erreur PostgreSQL 'Impossible de se connecter au serveur : Aucun fichier ou répertoire de ce type'

Comme d'autres, j'obtiens cette erreur lorsque je lance rake db:migrate dans mon projet ou même lorsque j'essaie la plupart des tâches liées à la base de données pour ma Ruby on Rails 3.2 applications.

PGError (Impossible de se connecter au serveur : No such file or directory. Le serveur serveur fonctionne-t-il localement et accepte-t-il les connexions sur le socket du domaine Unix ? "/tmp/.s.PGSQL.5432" ?

J'ai installé PostgreSQL con Homebrew il y a longtemps et à la suite d'une tentative d'installation de MongoDB récemment, mon installation de PostgreSQL n'a plus jamais été la même. J'utilise OS X v10.6 Snow Leopard.

Qu'est-ce qui ne va pas et comment puis-je mieux comprendre comment PostgreSQL est et devrait être configuré sur mon Mac ?

Jusqu'à présent (je pense) cela m'indique que PostgreSQL n'est pas en cours d'exécution ( ?).

ps -aef|grep postgres                                                                                                   (ruby-1.9.2-p320@jct-ana) (develop) 
  501 17604 11329   0   0:00.00 ttys001    0:00.00 grep postgres

Mais est-ce que cela m'indique que PostgreSQL est en cours d'exécution ?

 launchctl load -w /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist                                                        (ruby-1.9.2-p136) 
homebrew.mxcl.postgresql: Already loaded

Comment résoudre ce problème ? Qu'est-ce que je ne vois pas ?

PS : ~/Library/LaunchAgents comprend deux fichiers .plist de PostgreSQL. Je ne sais pas si c'est pertinent.

org.postgresql.postgres.plist
homebrew.mxcl.postgresql.plist

J'ai essayé ce qui suit et j'ai obtenu le résultat suivant.

$ psql -p 5432 -h localhost

psql: could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (fe80::1) and accepting
    TCP/IP connections on port 5432?

J'ai lu depuis que cela se produit parce qu'OS X installe sa propre version de PostgreSQL et que Homebrew installe une version différente à un endroit différent et que les commandes PostgreSQL cherchent dans le répertoire /tmp/. Vous devrez faire une recherche plus poussée sur Stack Overflow, mais en gros, vous faites un lien symbolique vers PostgreSQL pour que tout ce qui cherche dans le chemin tmp trouve en fait le vrai chemin, si cela a un sens.

C'est sur ce lien que j'ai trouvé d'autres choses à essayer, en particulier la création d'un lien symbolique comme indiqué ci-dessus, Mac OSX Lion Postgres n'accepte pas les connexions sur /tmp/.s.PGSQL.5432 . J'aimerais toujours que quelqu'un mette au point une explication décente des concepts derrière l'installation de PostgreSQL sur OS X et pourquoi c'est si difficile.

Dernières informations pour faciliter le dépannage :

$ which psql // This tells you which PostgreSQL you are using when you run $ psql. 

Ensuite, courez :

$ echo $PATH

L'élément clé à prendre en compte est le suivant :

Assurez-vous que le chemin d'accès à la copie de PostgreSQL que vous souhaitez exécuter précède le chemin d'accès à PostgreSQL du système OS X.

Il s'agit d'une exigence fondamentale qui détermine quel PostgreSQL est exécuté et c'est ce qui, d'après ce que l'on m'a dit, est à l'origine de la plupart de ces problèmes.

0 votes

Avez-vous trouvé une solution à ce problème ? Je vois que vous n'en avez pas marqué. Aucune de ces solutions ne m'aide non plus.

0 votes

Il s'agit encore principalement de vodou et d'incarnations étranges pour que cela fonctionne. Je viens d'ajouter [Edit 2] ci-dessus avec un lien avec quelques suggestions supplémentaires et comment faire le lien symbolique comme indiqué dans mes commentaires d'édition. Le lien symbolique a fonctionné pour moi à la fin, mais je pense que j'ai aussi désinstallé et réinstallé postgres et homebrew en cours de route, donc difficile de savoir exactement ce qui a fait la différence. Bonne chance. Faites un rapport si vous découvrez quelque chose de nouveau, avec 15 000 vues sur cette question, c'est quelque chose qui donne du fil à retordre à beaucoup de gens !

0 votes

@AndrasGyomrey Je reviens juste de RailsCamp15 en Australie et les gens ont dit qu'une des clés était d'avoir un fichier de chemin correct, j'ai édité l'Edit 3 ci-dessus pour expliquer cela.

113voto

Hass Points 121

Vérifiez qu'il n'y a pas de postmaster.pid dans votre répertoire postgres. /usr/local/var/postgres/

supprimer et démarrer le serveur.

Vérifier - https://github.com/mperham/lunchy est une excellente enveloppe pour launchctl.

3 votes

Cela a fonctionné pour moi. Je viens d'installer Yosemite, et j'ai chargé postgres à partir de homebrew. Cela a bien fonctionné la première fois que je l'ai utilisé, mais j'ai eu ce problème après un redémarrage. Je ne sais pas si c'est le cas, mais je ne sais pas si c'est le cas.

3 votes

Cela a fonctionné pour moi, mais pour les néophytes, quelqu'un peut-il expliquer pourquoi et à quel point c'est sûr ?

0 votes

@AlexanderMills si vous supprimez /usr/local/var/postgres/postmaster.pid alors que une instance de postgres est en cours d'exécution, vous devrez créer des instances, ce qui n'est pas une bonne chose. Mauvais, comme un comportement non déterministe de la base de données, des conditions de course, etc. Mais si vous êtes sûr qu'aucune instance de postgres n'est en cours d'exécution, il est possible de supprimer le fichier

59voto

josephmisiti Points 2085

" Postgres.app "est une meilleure solution si vous êtes sous OS X


Voici la solution :

  1. Arrêter la base de données
  2. cd /var
  3. sudo rm -r pgsql_socket
  4. sudo ln -s /tmp pgsql_socket
  5. chown _postgres:_postgres pgsql_socket
  6. Redémarrer PostgreSQL (pas votre ordinateur)

Plus d'informations sont disponibles à l'adresse suivante : " postgresql 9.0.3. sur Lion Dev Preview 1 ".

3 votes

Les erreurs reviennent pour moi et cette correction n'a pas aidé. J'ai l'impression de me débattre dans une pièce sombre en essayant de comprendre ce qui se passe réellement et le processus pour appliquer une correction moi-même. Pourriez-vous m'expliquer comment je peux diagnostiquer et résoudre ce problème ?

0 votes

Cela me convient. C'est un peu bizarre de changer de nom. /tmp à _postgres, mais bon :)

0 votes

Postgresapp fonctionne, mais pourquoi je ne peux pas démarrer mon serveur dans le terminal ? Après avoir quitté l'application, le problème revient comme prévu.

15voto

sola Points 2470

Cela a fonctionné pour moi pour l'erreur que vous avez mentionnée. Faire un de ces derniers :

  1. Il est possible de modifier le port par défaut spécifié dans le fichier postgres.conf dossier, si vous avez utilisé autre chose que le port par défaut 5432 lors de l'installation.

  2. Modifier le numéro de port dans postgresql.conf et redémarrer le serveur DB.

  3. Au lieu de psql tapez la commande complète :

    psql -p 5432 -h localhost   
    • le nom du serveur et le numéro de port

0 votes

1. Je pense que mon installation aurait été conforme aux valeurs par défaut.

0 votes

2. Je pourrais changer cela, quelles sont les implications d'un changement de port ?

0 votes

3. J'ai ajouté mon résultat du point 3 ci-dessus.

13voto

Fabricio Points 41

Si vous utilisez Homebrew, désinstallez Postgresql et pg gems:*

$ gem uninstall pg
$ brew uninstall postgresql

Téléchargez et exécutez le script suivant pour corriger les permissions sur /usr/local:* https://gist.github.com/rpavlik/768518

$ ruby fix_homebrew.rb

Puis réinstallez Postgres et pg gem:*

$ brew install postgresql  
$ initdb /usr/local/var/postgres -E utf8

Pour que launchd démarre postgresql à la connexion, exécutez :

$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents 

Ou démarrer manuellement.

Installer la gem pg

$ gem install pg

J'espère avoir aidé

0 votes

En brew info postgres : ARCHFLAGS="-arch x86_64" gem install pg

1 votes

Cela ne supprimerait-il pas les enregistrements dans la base de données ?

0 votes

initdb /usr/local/var/postgres -E utf8 œuvre. Merci beaucoup.

8voto

silvenon Points 538

J'ai eu ce problème lors de la mise à jour de Postgres vers la version 9.3.x. La solution rapide pour moi a été de rétrograder vers la version 9.2.x que j'avais auparavant (pas besoin d'en installer une nouvelle).

$ ls /usr/local/Cellar/postgresql/
9.2.4
9.3.2
$ brew switch postgresql 9.2.4
$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
<open a new Terminal tab or window to reload>
$ psql

" Homebrew installe-t-il une version spécifique de la formule ? "offre une explication beaucoup plus complète ainsi que d'autres moyens de résoudre le problème.

0 votes

Merci pour la contribution et les instructions claires pour répéter votre solution. Le lien que vous avez inclus est vraiment complet, je n'ai pas de problèmes avec postgres pour l'instant donc je ne suis pas sûr que cela soit utile à d'autres pour l'instant, mais pour tous les autres, si vous trouvez cela utile, merci de commenter ici.

0 votes

Je le trouve utile et pertinent, même s'il ne l'est peut-être pas directement. Il a résolu le problème en changeant de version, en utilisant brew, qui est un outil assez courant, et en répétant les étapes, jusqu'à présent, c'est génial, le lien aborde des questions plus spécifiques à brew, cependant, donc je peux voir que vous mettez en doute sa valeur dans le contexte de la question de l'OP.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X