web-dev-qa-db-fra.com

Pourquoi psql ne peut pas se connecter au serveur?

J'ai tapé psql et je reçois ceci:

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"?

J'ai utilisé Sudo netstat -nlp | grep 5432 pour voir le statut mais rien ne s'affiche. Et j'ai cherché en ligne, quelqu'un m'a dit de modifier pg_hba.conf mais je ne peux pas locate ce fichier. Et j'ai aussi essayé cette commandeSudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432. Ça ne peut pas marcher.

28
deathlee

L'erreur indique que l'utilitaire psql ne parvient pas à trouver le socket pour se connecter à votre serveur de base de données. Soit le service de base de données ne fonctionne pas en arrière-plan, soit le socket est situé ailleurs, soit le pg_hba.conf doit peut-être être corrigé.

Étape 1: vérifier que la base de données est en cours d'exécution

La commande peut varier en fonction de votre système d'exploitation. Mais sur la plupart des systèmes * ix, les éléments suivants fonctionneraient, il recherchera postgres parmi tous les processus en cours

ps -ef | grep postgres

Sur mon système, mac osx, cela crache

501   408     1   0  2Jul15 ??         0:21.63 /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres -r /usr/local/var/postgres/server.log

La dernière colonne affiche la commande utilisée pour démarrer le serveur et les options.

Vous pouvez consulter toutes les options disponibles pour démarrer le serveur postgres en utilisant les éléments suivants.

man postgres

À partir de là, vous constaterez que les options -D et -r sont respectivement les options datadir et logfilename

Étape 2: Si le service postgres est en cours d'exécution

Utilisez find pour rechercher l'emplacement du socket, qui devrait figurer quelque part dans le /tmp

Sudo find /tmp/ -name .s.PGSQL.5432

Si postgres est en cours d'exécution et accepte les connexions de socket, la procédure ci-dessus devrait vous indiquer l'emplacement de la socket. Sur ma machine, cela s'est avéré être: 

/tmp/.s.PGSQL.5432

Ensuite, essayez de vous connecter via psql en utilisant explicitement l’emplacement de ce fichier, par exemple.

psql -h /tmp/ dbname

Étape 3: Si le service est en cours d'exécution mais que vous ne voyez pas de socket

Si vous ne trouvez pas le socket mais constatez que le service est en cours d'exécution, vérifiez que le fichier pg_hba.conf autorise les sockets locaux.

Accédez à la variable datadir et vous devriez trouver le fichier pg_hba.conf.

Par défaut, vers le bas du fichier, vous devriez voir les lignes suivantes:

# "local" is for Unix domain socket connections only
local       all       all       trust

Si vous ne le voyez pas, vous pouvez modifier le fichier et redémarrer le service postgres. 

20
Haleemur Ali

S'il n'y a pas d'erreur dans le démarrage du service postgres, suivez ces étapes

Étape 1: Exécution de pg_lsclusters répertoriera tous les clusters postgres exécutés sur votre appareil.

par exemple: 

Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

très probablement le statut sera en panne dans votre cas et le service postgres

Étape 2: redémarrez le pg_ctlcluster

#format is pg_ctlcluster <version> <cluster> <action>
Sudo pg_ctlcluster 9.6 main start

#restart postgres
Sudo service postgres restart

Étape 3: échec de l'étape 2 et erreur renvoyée

Si ce processus n'aboutit pas, cela générera l'erreur . Mon erreur était (vous pouvez voir le journal des erreurs sur /var/log/postgresql/postgresql-9.6-main.log

FATAL: could not access private key file "/etc/ssl/private/ssl-cert-snakeoil.key": Permission denied
Try adding `postgres` user to the group `ssl-cert`

Étape 4: vérifier la propriété de postgres

Assurez-vous que postgres est le propriétaire de /var/lib/postgresql/version_no/maineg: Sudo chown postgres -R /var/lib/postgresql/9.6/main/

Étape 5: Vérifiez que l'utilisateur postgres appartient au groupe d'utilisateurs ssl-cert

Cela m'est arrivé et il s'est avéré que j'ai supprimé par erreur l'utilisateur Postgres du groupe "ssl-cert". Exécutez le code ci-dessous pour résoudre le problème du groupe d'utilisateurs et résoudre les autorisations.

#set user to group back with
Sudo gpasswd -a postgres ssl-cert

# Fixed ownership and mode
Sudo chown root:ssl-cert  /etc/ssl/private/ssl-cert-snakeoil.key
Sudo chmod 740 /etc/ssl/private/ssl-cert-snakeoil.key

# now postgresql starts! (and install command doesn't fail anymore)
Sudo service postgres restart
8
Noushad PP

J'ai rencontré un problème similaire à quelques reprises. Normalement, je viens de faire une nouvelle installation de PostgreSQL en suivant ce tutorial et cela résout le problème au détriment de la perte de données. 

J'étais déterminé à obtenir une vraie solution aujourd'hui. Le redémarrage de PostgreSQL l'a résolu sur Ubuntu. Sudo /etc/init.d/postgresql restart

7
Faith Nassiwa

Résolu! Bien que je ne sache pas ce qui s'est passé, je viens de supprimer tout le matériel et de le réinstaller. C’est la commande que j’ai utilisée pour le supprimer Sudo apt-get --purge remove postgresql\* et dpkg -l | grep postgres. Le dernier est de trouver tous les paquets au cas où ce ne serait pas propre.

4
deathlee

J'ai eu le même problème sur Devuan Ascii (peut-être aussi Debian?). Le fichier de configuration /etc/postgresql/9.6/main/postgresql.conf contient une directive unix_socket_directories qui pointe par défaut sur /var/run/postgresql. Le changer en /tmp, où la plupart des clients regardent par défaut, corrigea mon problème.

1
Markus

Donc, pour que mes copains et moi travaillions sur une application Node.js (avec Postgres et Sequelize), nous avons dû 

  1. brew install postgresql (l'un de nous manquait de postgres, l'un de nous ne l'était pas, et pourtant nous obtenions le même message d'erreur que celui indiqué ci-dessus)

  2. brew services start postgresql **** (utilisez Homebrew pour démarrer postgres)

  3. createdb <name of database in config.json file>

  4. node_modules/.bin/sequelize db:migrate

  5. npm start

0
Kala Wetzler

Je veux juste faire un petit ajout: si votre instance se plaint sur un socket, vous pouvez également vérifier unix_socket_directories dans le fichier /data/postgresql.conf qui aurait pu être défini sur /tmp, par exemple si vous avez utilisé une distribution tierce. Vous pouvez le changer en /var/run/postgresql et redémarrer le service. Cela peut également nécessiter la création d'un répertoire postgresql à /var/run et subsys/postgresql-9.6 à /var/lock si ceux-ci n'existent pas déjà (cela a fonctionné pour moi avec postgresql 9.6).

0
Anton Zvonovsky

L'erreur signifie que le serveur Postgres n'est pas en cours d'exécution. Essayez de le démarrer:

Sudo systemctl start postgresql

Assurez-vous que le serveur démarre au démarrage:

Sudo systemctl enable postgresql
0
sbandra

petit guide sur Debian:

  1. éditer /etc/postgresql/10/main/postgresql.conf avec listen_address *
  2. éditez /etc/postgresql/10/main/pg_hba.conf et ajoutez une ligne à la fin avec Host all all 0/0 md5
  3. créer le rôle de connexion postgres=# CREATE ROLE remoteuser LOGIN WITH PASSWORD 'foo'
  4. Sudo /etc/init.d/postgresql restart changements prennent effet 

  5. se connecter depuis clientside avec psql --Host=ipofserver --port=5432 --username=remoteuser --password --dbname=mydb

  6. le mot de passe est demandé de manière interactive qui dans ce cas est foo

comment accéder à distance à la base de données postgres sur le serveur à partir du client psql

0
ItsmeJulian

Cela peut causer n'importe quoi, par exemple, mon problème a été causé par une erreur typographique sur les fichiers de configuration . Certaines personnes disent que causées par des fichiers de certificat, un autre groupe dit causées par des locaux sans correspondance.

Si vous ne trouvez pas de solution à votre problème, supprimez postgres et réinstallez-le. C'est la meilleure solution.

0
Selcuk Ayhan

Lors de l’installation récente de postgresql. Par défaut, le nom d'utilisateur et le mot de passe sont affectés à "postgres". La fonctionnalité fournie par ce SGBDR consiste à ajouter un rôle pour le nouvel utilisateur et à créer une base de données. Si vous obtenez de telles erreurs:

  1. se connecter par nom d'utilisateur par défaut:

    root @ kalilinux: ~ # Sudo -i -u postgres

  2. ype psql pour invite interactive

    postgres @ kalilinux: ~ $ psql

  3. Pour quitter l'utilisation rapide

    \ q

  4. Pour créer un nouveau rôle d'utilisateur

    postgres @ kalilinux: ~ $ createuser --interactive

Maintenant, vous êtes dans shell psql interacive. Prendre plaisir. N'oubliez pas de vous connecter à partir de votre nom d'utilisateur et tapez psql pour Shell.

0
Suman Astani

Mon problème avec ce message d'erreur concernait des autorisations erronées sur des certificats de clé et PEM, que j'ai manipulés. Ce qui m'a beaucoup aidé, c'est: /Var/log/postgresql/postgresql-9.5-main.log où se trouvent toutes les erreurs.

0
fDebef

J'ai résolu ce problème en vérifiant mon système de fichiers Le disque était complètement plein et la base de données n'a donc pas pu démarrer

connexions sur socket de domaine Unix "/var/run/postgresql/.s.PGSQL.5432" ?

J'ai essayé des séries de dépannage, jusqu'à quand j'ai vérifié l'utilisation de mon disque et constaté qu'il était plein, 100% d'utilisation,

df -h
cd /var/log/odoo/
cat /dev/null > odoo-server.log
reboot
0
Hafeez Oguntola

Je faisais face au même problème et

Sudo su - postgres
initdb --locale en_US.UTF-8 -D /var/lib/postgres/data
exit
Sudo systemctl start postgresql
Sudo systemctl status postgresql

Cela a fonctionné pour moi.

0
Aashutosh Rathi