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.