PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL:Warum kann psql keine Verbindung zum Server herstellen?

Der Fehler besagt, dass das Dienstprogramm psql den Socket nicht finden kann, um eine Verbindung zu Ihrem Datenbankserver herzustellen. Entweder läuft der Datenbankdienst nicht im Hintergrund oder der Socket befindet sich woanders oder vielleicht in der pg_hba.conf muss behoben werden.

Schritt 1:Überprüfen Sie, ob die Datenbank ausgeführt wird

Der Befehl kann je nach Betriebssystem variieren. Aber auf den meisten *ix-Systemen würde das folgende funktionieren, es wird unter allen laufenden Prozessen nach postgres suchen

ps -ef | grep postgres

Auf meinem System, Mac OSX, spuckt das aus

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

Die letzte Spalte zeigt den Befehl zum Starten des Servers und die Optionen.

Sie können sich alle verfügbaren Optionen zum Starten des Postgres-Servers wie folgt ansehen.

man postgres

Von dort würden Sie sehen, dass die Optionen -D und -r sind jeweils das datadir &der logfilename .

Schritt 2:Wenn der Postgres-Dienst läuft

Verwenden Sie find um nach dem Ort des Sockets zu suchen, der sich irgendwo in /tmp befinden sollte

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

Wenn Postgres ausgeführt wird und Socket-Verbindungen akzeptiert, sollte Ihnen das obige den Speicherort des Sockets mitteilen. Auf meinem Rechner stellte sich heraus:

/tmp/.s.PGSQL.5432

Versuchen Sie dann, eine Verbindung über psql herzustellen, indem Sie explizit den Speicherort dieser Datei verwenden, z. B.

psql -h /tmp/ dbname

Schritt 3:Wenn der Dienst ausgeführt wird, aber kein Socket angezeigt wird

Wenn Sie den Socket nicht finden können, aber sehen, dass der Dienst ausgeführt wird, überprüfen Sie, ob die Datei pg_hba.conf lokale Sockets zulässt.

Navigieren Sie zum datadir und Sie sollten die pg_hba.conf finden Datei.

Standardmäßig sollten Sie am Ende der Datei die folgenden Zeilen sehen:

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

Wenn Sie es nicht sehen, können Sie die Datei ändern und den Postgres-Dienst neu starten.