J'ai installé la [pile Bitnami Django][1] qui inclut PostgreSQL 8.4.
Lorsque j'exécute psql -U postgres
, j'obtiens 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 fonctionne bien et le fichier 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
[1] : http://bitnami.org/stack/djangostack
Qu'est-ce qui donne ?
La preuve que 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#
Le message d'erreur fait référence à une socket de domaine Unix, vous devez donc modifier votre invocation de netstat
pour ne pas les exclure. Essayez donc sans l'option -t
:
netstat -nlp | grep 5432
Je suppose que le serveur écoute en fait sur le socket /tmp/.s.PGSQL.5432
plutôt que sur le socket /var/run/postgresql/.s.PGSQL.5432
auquel votre client tente de se connecter. C'est un problème typique lors de l'utilisation de paquets PostgreSQL compilés à la main ou par une tierce partie sur Debian ou Ubuntu, car la source par défaut pour le répertoire de socket du domaine Unix est /tmp
mais le paquetage Debian le change en /var/run/postgresql
.
Solutions de contournement possibles :
/opt/djangostack-1.3-0/postgresql/bin/psql
). Désinstallez éventuellement les paquets fournis par Ubuntu (cela peut être difficile à cause d'autres dépendances inverses).-H localhost
pour se connecter via TCP/IP à la place.-h /tmp
ou un paramètre PGHOST
équivalent pour pointer vers le bon répertoire.Vous pouvez utiliser psql -U postgres -h localhost
pour forcer la connexion à se faire via TCP au lieu des sockets de domaine UNIX ; votre sortie 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 PostgreSQL en utilisant une invocation différente de netstat :
netstat -lp --protocol=unix | grep postgres
En tout cas, les interfaces sur lesquelles le serveur PostgreSQL écoute sont configurées dans postgresql.conf
.