Verbindung zu postgresql an Port 5432 nicht möglich

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:

  • Verwenden Sie die von Ihrem Drittanbieter-Paket gelieferten Clients (rufen Sie /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).
  • Korrigieren Sie das Socket-Verzeichnis des Drittanbieter-Pakets, damit es mit Debian/Ubuntu kompatibel ist.
  • Verwenden Sie stattdessen -H localhost, um sich über TCP/IP zu verbinden.
  • Verwenden Sie -h /tmp oder eine entsprechende PGHOST-Einstellung, um auf das richtige Verzeichnis zu verweisen.
  • Verwenden Sie keine Pakete von Drittanbietern.
Kommentare (0)

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.

Kommentare (0)

Erstellen Sie einfach einen Softlink wie diesen:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
Kommentare (4)