165 votes

Psql n'a pas pu se connecter au serveur : No such file or directory, 5432 error ?

J'essaie d'exécuter psql sur ma machine Vagrant, mais j'obtiens cette erreur :

psql: could not connect to server: No such file or directory

Is the server running locally and accepting connections on 
Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Note : Vagrant 1.9.2 Boîte : ubuntu/trusty64, https://atlas.hashicorp.com/ubuntu/boxes/trusty64

EDIT Commandes que j'ai utilisées pour installer et exécuter postgres :

  • sudo apt-get update
  • sudo apt-get install postgresql
  • sudo su postgres
  • psql -d postgres -U postgres

2 votes

C'est la réponse qui a fonctionné pour moi : askubuntu.com/a/824325/733901

219voto

malvadao Points 845

J'ai rencontré le même problème, lié à la configuration de mon fichier pg_hba.conf (situé dans le dossier de l'utilisateur). /etc/postgresql/9.6/main ). Veuillez noter que 9.6 est la version de postgresql que j'utilise.

L'erreur elle-même est liée à une mauvaise configuration de postgresql, qui fait que le serveur se bloque avant son démarrage.

Je vous suggère de suivre ces instructions :

  1. Certifier que le service postgresql est en cours d'exécution, en utilisant sudo service postgresql start

  2. Exécuter pg_lsclusters depuis votre terminal

  3. Vérifiez quel est le cluster que vous exécutez, la sortie devrait être quelque chose comme :

    Version - Statut du port du cluster Propriétaire Répertoire de données

    9.6 ------- main -- 5432 postgres en ligne /var/lib/postgresql/9.6/main

    Ne tenez pas compte des signes '---', car ils ne sont utilisés que pour l'alignement. Les informations importantes sont la version et le cluster. Vous pouvez également vérifier si le serveur est en cours d'exécution ou non dans la colonne d'état.

  4. Copiez les informations de la version et du cluster, et utilisez-les comme suit : pg_ctlcluster <version> <cluster> start Dans mon cas, en utilisant la version 9.6 et le cluster 'main', ce serait donc pg_ctlcluster 9.6 main start

  5. Si quelque chose ne va pas, postgresql génère un journal, auquel on peut accéder à l'adresse suivante /var/log/postgresql/postgresql-<version>-main.log Dans mon cas, la commande complète serait donc la suivante sudo nano /var/log/postgresql/postgresql-9.6-main.log .

  6. La sortie devrait montrer quelle est l'erreur.

    2017-07-13 16:53:04 BRT [32176-1] JOURNAL : méthode d'authentification invalide "all"
    2017-07-13 16:53:04 BRT [32176-2] CONTEXTE : Ligne 90 du fichier de configuration "/etc/postgresql/9.5/main/pg_hba.conf".
    2017-07-13 16:53:04 BRT [32176-3] FATAL : impossible de charger pg_hba.conf

  7. Corrigez les erreurs et redémarrez le service postgresql à travers sudo service postgresql restart et ça devrait aller.

J'ai beaucoup cherché pour trouver ceci, le mérite en revient à ceci poste .

Bonne chance !

5 votes

Excellent guide. Des explications très complètes !

2 votes

Pour l'étape 4, j'ai dû faire sudo systemctl start postgresql@9.5-main au lieu de pg_ctlcluster 9.5 main start . Merci pour votre explication géniale !

1 votes

Sur le mien, je ne peux pas l'exécuter : "pg_ctlcluster 10 main start" à la place ceci fonctionne pour moi : "/usr/lib/postgresql/10/bin/pg_ctl restart -D /var/lib/postgresql/10/main" bien sûr vous devez indiquer votre propre version de postgre et le chemin. J'ai oublié où j'ai trouvé cette solution, mais elle est dans l'historique de mon terminal. Peut-être que quelqu'un en a besoin. Merci pour cette réponse, cela m'a conduit dans la bonne direction.

58voto

martinlasek Points 157

J'ai eu le même problème mais aucune des réponses données ici ne m'a aidé.

Comment je l'ai réparé (mac)

  • Essayez de démarrer postgresql avec pg_ctl -D /usr/local/var/postgres start
  • Cherchez le Message d'erreur qui dit quelque chose comme FATAL: could not open directory "pg_tblspc": No such file or directory .
  • Créez ce répertoire manquant mkdir /usr/local/var/postgres/pg_tblspc
  • Répétez l'étape 1 jusqu'à ce que vous ayez créé tous les répertoires manquants.
  • Lorsque vous avez terminé et que vous essayez de redémarrer postgresql, il y a pourrait dites FATAL: lock file "postmaster.pid" already exists
  • Supprimer postmaster.pid : rm /usr/local/var/postgres/postmaster.pid
  • Démarrer postgres avec : pg_ctl -D /usr/local/var/postgres start
  • Fait ✨

0 votes

Travaillé. MERCI.

18voto

wfgeo Points 392

J'envoie ce message à tous ceux qui se sentent perdus et désespérés comme je l'ai été lorsque j'ai trouvé cette question. Il semble que parfois, en modifiant certains fichiers de configuration liés à psotgresql, on peut accidentellement changer les permissions du fichier :

enter image description here

Notez que pg_hba.conf appartient à Root, et que les utilisateurs ne peuvent même pas le lire. Ainsi, postgres ne peut pas ouvrir ce fichier et ne peut donc pas démarrer le serveur, ce qui entraîne l'erreur décrite dans la question initiale.

En courant

sudo chmod +r pg_hba.conf

J'ai pu rendre ce fichier à nouveau accessible à l'utilisateur de postgres, puis après avoir exécuté

sudo service postgresql start

J'ai pu remettre le serveur en marche.

0 votes

Oui, c'était mon problème, et cela n'a pas été signalé dans les journaux (ou si c'était le cas, je ne l'ai pas compris).

0 votes

Ce n'est pas exactement ce qui m'est arrivé, mais pour une raison quelconque, NETWORK SERVICE a perdu les privilèges d'écriture sur toute la structure du répertoire. Cette réponse m'a mis sur la bonne voie, d'où la note positive.

8voto

Gaurav Verma Points 51

Utilisez la commande :

rm -rf /usr/local/var/postgres && initdb /usr/local/var/postgres -E utf8

13 votes

Cela ne supprime-t-il pas toute la base de données ? Je pense qu'un mot d'avertissement s'impose.

1 votes

Merci @Tucker Watts et @Gaurav Verma. J'ai résolu mon problème en essayant les deux solutions et en ajoutant cette commande pg_ctl -D /usr/local/var/postgres -l logfile start .

6voto

J2112O Points 331

Est-ce que le /etc/postgresql/9.6/main/postgresql.conf montre que ce port est assigné ? Sur mon installation Linux Xubuntu par défaut, le mien affichait le port = 5433 pour une raison quelconque si je me souviens bien, mais j'ai commenté la ligne dans ce même fichier qui disait listen_addresses = 'localhost' et décommenté la ligne listen_addresses = '*' . C'est donc là qu'il faut commencer et vérifier. J'espère que cela vous aidera.

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