104 votes

Impossible de se connecter à PostgreSQL qui écoute sur le port 5432

J'ai installé le Pile Django Bitnami qui incluait PostgreSQL 8.4.

Quand je cours psql -U postgres Je reçois l'erreur suivante :

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

PG est définitivement en marche et le pg_hba.conf ressemble à ceci :

# TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Qu'est-ce qui se passe ?

"Preuve" que le pg fonctionne :

root@assaf-desktop:/home/assaf# ps axf | grep postgres
14338 ?        S      0:00 /opt/djangostack-1.3-0/postgresql/bin/postgres -D /opt/djangostack-1.3-0/postgresql/data -p 5432
14347 ?        Ss     0:00  \_ postgres: writer process                                                                        
14348 ?        Ss     0:00  \_ postgres: wal writer process                                                                    
14349 ?        Ss     0:00  \_ postgres: autovacuum launcher process                                                           
14350 ?        Ss     0:00  \_ postgres: stats collector process                                                               
15139 pts/1    S+     0:00              \_ grep --color=auto postgres
root@assaf-desktop:/home/assaf# netstat -nltp | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      14338/postgres  
tcp6       0      0 ::1:5432                :::*                    LISTEN      14338/postgres  
root@assaf-desktop:/home/assaf#

100voto

Stewart Points 1138

Ce problème provient de l'installation du postgres sans numéro de version. Bien que postgres sera installé et ce sera la bonne version, le script pour configurer le cluster ne fonctionnera pas correctement ; c'est un problème de packaging.

Si vous êtes à l'aise avec postgres il existe un script que vous pouvez exécuter pour créer ce cluster et obtenir postgres en cours d'exécution. Cependant, il y a un moyen plus facile.

Tout d'abord, il faut purger l'ancienne installation de postgres, qui va supprime tout de l'ancienne installation, y compris les bases de données, donc sauvegardez d'abord vos bases de données. . Le problème se situe actuellement dans la version 9.1, je suppose donc que c'est ce que vous avez installé.

sudo apt-get remove --purge postgresql-9.1

Il suffit maintenant de réinstaller

sudo apt-get install postgresql-9.1

Notez le nom du paquet avec le numéro de version. HTH.

32voto

Junfeng Points 361

Le message d'erreur se réfère à un socket de domaine Unix, vous devez donc modifier votre système d'exploitation. netstat pour ne pas les exclure. Essayez donc sans l'option -t :

netstat -nlp | grep 5432

Je suppose que le serveur est en train d'écouter sur le socket /tmp/.s.PGSQL.5432 plutôt que le /var/run/postgresql/.s.PGSQL.5432 à laquelle votre client tente de se connecter. C'est un problème typique lors de l'utilisation de paquets PostgreSQL compilés manuellement ou par des tiers sur Debian ou Ubuntu, car la source par défaut pour le répertoire socket du domaine Unix est /tmp mais l'emballage Debian le change en /var/run/postgresql .

Solutions de contournement possibles :

  • Utilisez les clients fournis par votre paquetage tiers (appelez /opt/djangostack-1.3-0/postgresql/bin/psql ). Désinstaller éventuellement les paquets fournis par Ubuntu (cela peut être difficile en raison d'autres dépendances inverses).
  • Corriger le répertoire socket du paquet tiers pour qu'il soit compatible avec Debian/Ubuntu.
  • Utilisez -H localhost pour se connecter via TCP/IP à la place.
  • Utilisez -h /tmp ou équivalent PGHOST pour pointer vers le bon répertoire.
  • N'utilisez pas de paquets tiers.

27voto

angelous Points 371

Cela fonctionne pour moi :

Modifier : postgresql.conf

sudo nano /etc/postgresql/9.3/main/postgresql.conf

Activer ou ajouter :

listen_addresses = '*'

Redémarrez le moteur de la base de données :

sudo service postgresql restart

Vous pouvez également vérifier le fichier pg_hba.conf

sudo nano /etc/postgresql/9.3/main/pg_hba.conf

Et ajoutez votre adresse réseau ou hôte :

host    all             all             192.168.1.0/24          md5

20voto

Neall Points 251

Vous pouvez utiliser psql -U postgres -h localhost pour forcer la connexion à passer par TCP au lieu des sockets de domaine UNIX ; votre netstat montre que le serveur PostgreSQL écoute sur le port 5432 de localhost.

Vous pouvez découvrir quel socket UNIX local est utilisé par le serveur PostgrSQL en utilisant une invocation différente de la commande netstat :

netstat -lp --protocol=unix | grep postgres

En tout cas, les interfaces sur lesquelles le serveur PostgreSQL écoute sont configurées dans le fichier postgresql.conf .

19voto

Uriel Points 191

Créez simplement un lien logiciel comme ceci :

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X