Ich habe den Bitnami Django Stack installiert, der PostgreSQL 8.4 enthält.
Wenn ich psql -U postgres
ausführe, erhalte ich den folgenden Fehler:
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 läuft definitiv und die Datei pg_hba.conf
sieht wie folgt aus:
# 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
Was ist los?
"Beweis", dass pg ausgeführt wird:
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#
Die Fehlermeldung bezieht sich auf einen Unix-Domain-Socket, also müssen Sie Ihren netstat
-Aufruf so anpassen, dass er diese nicht ausschließt. Versuchen Sie es also ohne die Option -t
:
netstat -nlp | grep 5432
Ich würde vermuten, dass der Server auf dem Socket /tmp/.s.PGSQL.5432
lauscht und nicht auf dem Socket /var/run/postgresql/.s.PGSQL.5432
, mit dem Ihr Client versucht, sich zu verbinden. Dies ist ein typisches Problem bei der Verwendung von handkompilierten PostgreSQL-Paketen oder Paketen von Drittanbietern unter Debian oder Ubuntu, weil der Quellcode-Standard für das Socket-Verzeichnis der Unix-Domäne /tmp
ist, aber das Debian-Paket ändert es in /var/run/postgresql
.
Mögliche Umgehungen:
/opt/djangostack-1.3-0/postgresql/bin/psql
auf). Möglicherweise deinstallieren Sie die von Ubuntu gelieferten Pakete ganz (könnte wegen anderer umgekehrter Abhängigkeiten schwierig sein).-H localhost
, um sich über TCP/IP zu verbinden.-h /tmp
oder eine entsprechende PGHOST
-Einstellung, um auf das richtige Verzeichnis zu verweisen.Sie können psql -U postgres -h localhost
verwenden, um zu erzwingen, dass die Verbindung über TCP statt über UNIX-Domain-Sockets erfolgt; Ihre netstat
-Ausgabe zeigt, dass der PostgreSQL-Server auf localhost's Port 5432 lauscht.
Sie können herausfinden, welcher lokale UNIX-Socket vom PostgreSQL-Server verwendet wird, indem Sie einen anderen Aufruf von netstat verwenden:
netstat -lp --protocol=unix | grep postgres
Die Schnittstellen, auf denen der PostgreSQL-Server lauscht, werden in jedem Fall in der Datei postgresql.conf
konfiguriert.