web-dev-qa-db-fra.com

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

Comme certains autres, je reçois cette erreur lorsque j'exécute rake db: migrate dans mon projet ou même que j'essaie la plupart des tâches de base de données pour mes applications Ruby on Rails 3.2.

PGError (impossible de se connecter au serveur: aucun fichier ni répertoire de ce type. Le serveur Ne s'exécute-il que localement et accepte-t-il les connexions sur le socket du domaine Unix "/Tmp/.s.PGSQL.5432"?

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

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

Jusqu'ici (je pense) cela me dit 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 me dit 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 puis-je réparer ça? qu'est-ce que je ne vois pas?

PS: ~/Library/LaunchAgents inclut deux fichiers .plist PostgreSQL. Je ne suis pas sûr que ce soit pertinent.

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

J'ai essayé le suivant et obtenu un résultat comme ci-dessous.

$ 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 produisait car OS X installe sa propre version de PostgreSQL et Homebrew installe une version différente à un endroit différent et que les commandes de PostgreSQL regardent dans le répertoire/tmp /. Vous aurez besoin de chercher plus sur le dépassement de pile, mais en gros, vous devez créer un lien symbolique avec PostgreSQL afin que tout ce qui regarde dans ce chemin tmp trouve le vrai chemin, si cela a du sens.

C’est le lien sur lequel j’ai trouvé quelques tâches supplémentaires à essayer, notamment le lien symbolique décrit ci-dessus, Mac OSX Lion Postgres n’accepte pas les connexions sur /tmp/.s.PGSQL.5432 . J'aimerais quand même que quelqu'un rassemble une explication décente des concepts sous-jacents à l'installation de PostgreSQL sur OS X et explique pourquoi c'est si difficile.

Dernières informations pour vous aider avec le dépannage:

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

Puis lancez:

$ echo $PATH

L'essentiel à prendre en compte est le suivant:

Assurez-vous que l'entrée du chemin de la copie de PostgreSQL que vous voulez exécuter arrive AVANT LE chemin d'accès à PostgreSQL du système OS X.

Il s’agit d’une exigence fondamentale qui détermine le type de PostgreSQL à exécuter et c’est ce qui m’explique qui est à l’origine de la plupart de ces problèmes.

129
Evolve

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

supprimez-le et démarrez le serveur.

Vérifiez - https://github.com/mperham/lunchy est un excellent wrapper pour launchctl.

97
Hass

UPDATE: ICI IS UN MEILLEUR FIX SI VOUS SOIS SUR OSX ...

http://postgresapp.com/


Ancienne réponse:

Voici le correctif, plus d'infos ici:

https://github.com/mxcl/homebrew/issues/5004

Tout d’abord, arrêtez la base de données, puis

  1. cd/var
  2. rm -r pgsql_socket
  3. ln -s/tmp pgsql_socket
  4. chown _postgres: _postgres pgsql_socket
  5. redémarrez postgres (pas votre ordinateur)
56
josephmisiti

Pour moi, ça marche

rm /usr/local/var/postgres/postmaster.pid
45
tsunllly

Pour l'erreur ci-dessus que vous avez mentionnée, cela fonctionne pour moi.

1) éventuellement, modifiez votre port par défaut non spécifié dans le fichier postgres.conf, Si vous avez mentionné autre que le port par défaut n ° 5432 lors de l'installation. 

(OU)

2) Modifiez le numéro de port dans le fichier postgresql.conf et redémarrez le serveur de base de données. 

(OU)

3) au lieu de psql, tapez une commande complète comme 

"psql -p 5432 -h localhost" 

  • nom du serveur et le numéro de port 
14
solaimuruganv

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

$ gem uninstall pg
$ brew uninstall postgresql

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

$ Ruby fix_homebrew.rb

Ensuite, réinstallez Postgres et pg gem: *

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

Pour que launchd lance postgresql au moment de la connexion, exécutez: 

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

Ou démarrez manuellement.

Installer pg gem 

$ gem install pg

J'espère avoir aidé

10
Fabricio

J'ai eu ce problème lorsque j'ai mis à niveau Postgres vers 9.3.x. La solution rapide pour moi consistait à rétrograder à la version 9.2.x que j'avais auparavant (inutile d'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

Cette réponse offre une explication beaucoup plus complète ainsi que d'autres moyens de résoudre le problème. 

8
silvenon

Donc, pour beaucoup de problèmes ici, il semble que les gens utilisaient déjà psql et ont dû supprimer postmaster.pid. Cependant, je n'avais pas ce problème car je n'avais même jamais installé correctement Postgres dans mon système.

Voici une solution qui a fonctionné pour moi dans MAC OSX Yosemite 

  1. Je suis allé à http://postgresapp.com/ et j'ai téléchargé l'application.
  2. J'ai déplacé l'application dans le répertoire Application /
  3. Je l'ai ajouté à $ PATH en ajoutant ceci à .bashrc ou .bash_profile ou .zshrc: export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
  4. J'ai exécuté le postgres à partir du répertoire Applications, puis à nouveau exécuter la commande et cela a fonctionné.

J'espère que cela t'aides! Toodles!

Aussi, cette réponse m'a aidé le plus: https://stackoverflow.com/a/21503349/3173748

5
superjisan

Lorsque vous exécutez. Par conséquent, même si pgadmin et d'autres clients peuvent fonctionner, psql ne le fera pas.

Vous devez modifier le fichier postgresql.conf et les fichiers pg_hba.conf afin d'autoriser la connexion sur un socket réel. Cela permettra également la connexion depuis une adresse IP distante, raison pour laquelle elle est désactivée par défaut.

Ces fichiers sont dans le répertoire de données mais l'emplacement réel peut être différent en fonction de l'installation de postgres. Avec postgres en cours d'exécution, exécutez la commande suivante:

ps -ef | grep postmaster

Ces deux fichiers sont le répertoire -D (peut-être/usr/local/pgsql/data).

Pour le fichier postgresql.conf, décommentez le listen_address et changez le en:

listen_address = '*'

Pour le pg_hba.conf, ajoutez la ligne:

Host all all 0.0.0.0/0 md5
4
oenpelli

Je ne connais pas vraiment Mac ou Homebrew, mais je connais très bien PostgreSQL.

Vous voulez savoir où sont les journaux de PostgreSQL essayant de démarrer et quel est le répertoire de socket pour PostgreSQL. Par défaut, lorsque vous générez PG, le répertoire du socket est/tmp /. Si vous n'avez pas changé cela lors de la création de PG, puis de celui-ci, vous devriez pouvoir voir un fichier de socket dans/tmp si vous le faites: ls -al/tmp

Le fichier de socket commence par un ".", Vous ne le verrez donc pas avec le '-a' à ls.

Si vous ne voyez pas de socket ici et que vous ne voyez rien de ps awux | grep postgres, alors PG n’est probablement pas en cours d’exécution, ou peut-être est-il un logiciel installé sur OSX. Il se peut que vous rencontriez un conflit lors de l'écoute sur le port 5432 sur localhost. Utilisez netstat -anp pour savoir ce qui est éventuellement écouté sur 5432. Si un PG Mac OSX est déjà en train d'écouter sur ce port être le problème.

J'espère que cela pourra aider. J'ai entendu dire que l'homebrew pouvait rendre les choses un peu laides et beaucoup de personnes à qui j'ai parlé ont encouragé l'utilisation d'un VM à la place.

2
Stephen Frost

Bonjour le monde :)
La meilleure façon, mais étrange pour moi était de faire les choses suivantes.

1) Télécharger postgres93.app ou une autre version. Ajoutez cette application dans le dossier/Applications /.

2) Ajoutez une ligne (commande) dans le fichier .bash_profile (qui se trouve dans mon répertoire personnel):

export PATH =/Applications/Postgres93.app/Contenu/MacOS/bin /: $ PATH
C'est un PATH pour psql à partir de Postgres93.app. La ligne (commande) s'exécute à chaque démarrage de la console.

3) Lancez Postgres93.app à partir du dossier /Applications/. Il démarre un serveur local (le port est "5432" et l'hôte est "localhost").

4) Après toutes ces manipulations, j’ai été heureux d’exécuter $ createuser -SRDP user_name et d’autres commandes et de voir que cela fonctionnait! Postgres93.app peut être exécuté pour s'exécuter à chaque démarrage de votre système.

5) Aussi, si vous voulez voir vos bases de données graphiquement, vous devez installer PG Commander.app. C'est un bon moyen de voir votre base de données postgres sous forme de jolies tables de données

Bien sûr, cela n’est utile que pour le serveur local. Je serai heureux si ces instructions aident les autres qui ont fait face à ce problème.

1
crazzyaka

La cause

Lion est livré avec une version de postgres déjà installée et utilise ces fichiers binaires par défaut. En général, vous pouvez contourner ce problème en utilisant le chemin d'accès complet aux fichiers binaires homebrew postgres, mais il peut toujours y avoir des problèmes avec d'autres programmes.

La solution

curl http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh | sh

Via 

http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/

1
SocoM

J'avais PostgreSQL 9.3 et j'ai eu la même erreur,

Connexion au serveur impossible: connexion refusée Le serveur est-il en cours d'exécution sur l'hôte "localhost" (127.0.0.1) et en acceptant les connexions TCP/IP sur port 5432?

J'ai corrigé ceci en utilisant:

chmod 777  /var/lib/pgsql/9.3/data/pg_hba.conf 
service postgresql-9.3 restart

Ça marche pour moi.

1
Mahesh Shitole

pour ce que ça vaut, j'ai rencontré la même erreur quand j'avais une faute de frappe (md4 au lieu de md5) dans mon fichier pg_hba.conf (/etc/postgresql/9.5/main/pg_hba.conf)

Si vous êtes arrivé comme je l'ai fait, revérifiez ce fichier une fois pour vous assurer qu'il ne contient rien de ridicule.

1
Zach Lamberty

J'ai corrigé cela en mettant à niveau postgres.

brew update
brew upgrade

Ensuite, je devais également mettre à niveau les bases de données pour être compatible avec la nouvelle version majeure, car j'avais mis à niveau de 10 à 11.

brew postgresql-upgrade-database

(source https://github.com/facebook/react-native/issues/18760#issuecomment-410533581 )

1
Nelu

Cette erreur s’explique par le fait que votre base de données postgres locale s’arrête lorsque vous redémarrez votre ordinateur. Dans une nouvelle fenêtre de terminal, tapez simplement: 

$psql -h localhost 

pour redémarrer le serveur.

0
Pstrazzulla

Si vous utilisez MacOS et que vous utilisez homebrew, j'ai trouvé cette réponse extrêmement utile: 

https://stackoverflow.com/a/27708774/4062901

Pour moi, mon serveur fonctionnait mais à cause d'une mise à niveau, j'avais des problèmes de connexion (note: j'utilise les services d'infusion). Si Postgres est en cours d'exécution, essayez cat /usr/local/var/postgres/server.log et voyez ce que disent les journaux. Mon erreur était une migration, pas un problème de connexion.

De plus, après la migration manuelle proposée (ce qui fonctionne mais), j'ai constaté qu'il n'y avait plus de table pour mon utilisateur. Essayez cette commande pour corriger cela: createdb (avec psql: FATAL: la base de données "<utilisateur>" n’existe pas )

0
rickrizzo

Une des raisons pourrait être que 

unix_socket_directories dans le fichier postgresql.conf ne figure pas dans le répertoire recherché.

Dans l'exemple de question, il recherche le répertoire/tmp, il doit être fourni dans le fichier postgresql.conf.

quelque chose comme ça: 

unix_socket_directories = '/var/run/postgresql,/tmp'    # comma-separated list of directories

Cette solution a fonctionné pour moi.

0
Kiran Telukunta

L'exécution locale de PostgreSQL peut poser différents problèmes. Je recommanderais de nettoyer toutes les versions de postgres installées et de recommencer à zéro. Une fois que vous l'avez installé, il est très facile de recréer votre base de données si vous avez votre projet Rails avec le db/schema.rb à jour __

Voici comment j’ai l'habitude d'installer PostgreSQL sur un Mac . Si vous exécutez votre base de données sous l'utilisateur root localement, vous pouvez omettre la dernière étape qui crée un utilisateur todo.

0
Alexander Tamoykin

Redémarrez simplement Postgres dès l'apparition de l'erreur en exécutant brew services restart postgresql, puis réessayez.

0
Kanke