it-swarm.com.de

Warum kann psql keine Verbindung zum Server herstellen?

Ich habe psql eingegeben und erhalte folgendes:

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"?

Ich habe Sudo netstat -nlp | grep 5432 verwendet, um den Status zu sehen, aber es wurde nichts angezeigt. Und ich habe online gesucht, jemand hat mir gesagt, pg_hba.conf zu ändern, aber ich kann diese Datei nicht locate. Und ich habe auch diesen BefehlSudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432 ausprobiert. Es kann nicht funktionieren.

28
deathlee

Der Fehler gibt an, dass das Dienstprogramm psql den Socket für die Verbindung zum Datenbankserver nicht finden kann. Entweder läuft der Datenbankdienst nicht im Hintergrund oder der Socket befindet sich an einem anderen Ort oder der pg_hba.conf muss möglicherweise behoben werden.

Schritt 1: Stellen Sie sicher, dass die Datenbank ausgeführt wird

Der Befehl kann je nach Betriebssystem variieren. Auf den meisten * ix-Systemen würde jedoch Folgendes funktionieren: Es wird unter allen laufenden Prozessen nach Postgres gesucht

ps -ef | grep postgres

Auf meinem System, Mac OSX, spuckt dies 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, der zum Starten des Servers verwendet wird, und die Optionen.

Sie können alle verfügbaren Optionen zum Starten des Postgres-Servers mithilfe der folgenden Optionen anzeigen.

man postgres

Von dort aus sehen Sie, dass die Optionen -D und -r jeweils die datadir und die logfilename sind. 

Schritt 2: Wenn der Postgres-Dienst ausgeführt wird

Verwenden Sie find, um nach dem Speicherort des Sockets zu suchen, der sich irgendwo im /tmp befinden sollte.

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

Wenn Postgres aktiv ist und Socket-Verbindungen akzeptiert, sollten Sie oben den Standort des Socket angeben. Auf meiner Maschine stellte sich heraus: 

/tmp/.s.PGSQL.5432

Versuchen Sie dann, die Verbindung über psql explizit über die Position dieser Datei herzustellen, z.

psql -h /tmp/ dbname

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

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

Navigieren Sie zur datadir und Sie sollten die pg_hba.conf-Datei finden.

Am unteren Rand der Datei sollten standardmäßig folgende Zeilen angezeigt werden:

# "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. 

20
Haleemur Ali

Wenn beim Starten des Postgres-Dienstes kein Fehler auftritt, führen Sie die folgenden Schritte aus

Schritt 1: Wenn Sie pg_lsclusters ausführen, werden alle Postgres-Cluster aufgelistet, die auf Ihrem Gerät ausgeführt werden

z.B: 

Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

höchstwahrscheinlich ist der Status in Ihrem Fall- und Postgres-Dienst nicht verfügbar

Schritt 2: Starten Sie den pg_ctlcluster neu

#format is pg_ctlcluster <version> <cluster> <action>
Sudo pg_ctlcluster 9.6 main start

#restart postgres
Sudo service postgres restart

Schritt 3: Schritt 2 schlug fehl und warf einen Fehler

Wenn dieser Vorgang nicht erfolgreich ist, wird der Fehler ... ausgegeben. Mein Fehler war (Sie können das Fehlerprotokoll in /var/log/postgresql/postgresql-9.6-main.log sehen) 

FATAL: could not access private key file "/etc/ssl/private/ssl-cert-snakeoil.key": Permission denied
Try adding `postgres` user to the group `ssl-cert`

Schritt 4: Überprüfen Sie das Eigentum von Postgres

Stellen Sie sicher, dass postgres der Besitzer von /var/lib/postgresql/version_no/maineg ist: Sudo chown postgres -R /var/lib/postgresql/9.6/main/

Schritt 5: Überprüfen Sie, ob der postgres-Benutzer zur ssl-cert-Benutzergruppe gehört

Es passierte mir und es stellte sich heraus, dass ich den Postgres-Benutzer irrtümlich aus der Gruppe "ssl-cert" entfernt habe. Führen Sie den folgenden Code aus, um das Problem mit der Benutzergruppe und die Berechtigungen zu beheben

#set user to group back with
Sudo gpasswd -a postgres ssl-cert

# Fixed ownership and mode
Sudo chown root:ssl-cert  /etc/ssl/private/ssl-cert-snakeoil.key
Sudo chmod 740 /etc/ssl/private/ssl-cert-snakeoil.key

# now postgresql starts! (and install command doesn't fail anymore)
Sudo service postgres restart
8
Noushad PP

Ich bin schon ein paar Mal auf ein ähnliches Problem gestoßen. Normalerweise mache ich einfach eine Neuinstallation von PostgreSQL nach diesem Tutorial und das löst das Problem auf Kosten von Datenverlust. 

Ich war entschlossen, heute eine echte Lösung zu finden. Durch den Neustart von PostgreSQL wurde es auf Ubuntu behoben. Sudo /etc/init.d/postgresql restart

7
Faith Nassiwa

Ich habe es gelöst! Ich weiß zwar nicht, was passiert ist, aber ich habe einfach alles gelöscht und neu installiert. Dies ist der Befehl, mit dem ich Sudo apt-get --purge remove postgresql\* und dpkg -l | grep postgres gelöscht habe. Letzteres ist das Finden aller Pakete für den Fall, dass es nicht sauber ist.

4
deathlee

Ich hatte die gleiche Ausgabe auf Devuan Ascii (vielleicht auch Debian?). Die Konfigurationsdatei /etc/postgresql/9.6/main/postgresql.conf enthält eine Direktive unix_socket_directories, die standardmäßig auf /var/run/postgresql zeigt. Das Ändern in /tmp, wo die meisten Clients standardmäßig aussehen, hat es für mich behoben.

1
Markus

Ich hatte das ähnliche Problem und das Problem lag in der Konfigurationsdatei pg_hba.conf. Ich hatte zuvor einige Änderungen vorgenommen, die dazu führten, dass der Server beim Versuch, ihn zu starten, ausfiel. Das Auskommentieren der zusätzlichen Ergänzungen löste das Problem.

0
Ashwin Vijendra

Für mich und meine Freunde, die an einer Node.js-App (mit Postgres und Sequelize) arbeiten, mussten wir also 

  1. brew install postgresql (einer von uns hat Postgres vermisst, einer von uns nicht, und dennoch bekamen wir die gleiche Fehlermeldung wie oben aufgeführt)

  2. brew services start postgresql **** (Homebrew verwenden, um Postgres zu starten)

  3. createdb <name of database in config.json file>

  4. node_modules/.bin/sequelize db:migrate

  5. npm start

0
Kala Wetzler

Ich möchte nur eine kleine Ergänzung hinzufügen: Wenn sich Ihre Instanz über ein Socket beschwert, können Sie auch unix_socket_directories in der /data/postgresql.conf-Datei überprüfen, die auf /tmp eingestellt sein könnte, beispielsweise, wenn Sie eine Drittanbieter-Distribution verwendet haben. Sie können es in /var/run/postgresql ändern und den Dienst neu starten. Dies erfordert möglicherweise auch die Erstellung eines postgresql-Verzeichnisses bei /var/run und subsys/postgresql-9.6 bei /var/lock, falls diese noch nicht vorhanden sind (bei mir mit postgresql 9.6 gearbeitet).

0
Anton Zvonovsky

Der Fehler bedeutet, dass der Postgres-Server nicht läuft. Versuchen Sie es zu starten:

Sudo systemctl start postgresql

Stellen Sie sicher, dass der Server beim Booten gestartet wird:

Sudo systemctl enable postgresql
0
sbandra

kurzanleitung für Debian:

  1. /etc/postgresql/10/main/postgresql.conf mit listen_address bearbeiten *
  2. bearbeiten Sie /etc/postgresql/10/main/pg_hba.conf und fügen Sie am Ende eine Zeile mit Host all all 0/0 md5 ein.
  3. anmelderolle erstellen postgres=# CREATE ROLE remoteuser LOGIN WITH PASSWORD 'foo'
  4. Sudo /etc/init.d/postgresql restart-Änderungen werden wirksam 

  5. login vom Kunden mit psql --Host=ipofserver --port=5432 --username=remoteuser --password --dbname=mydb

  6. das Passwort wird interaktiv abgefragt, was in diesem Fall foo ist

so können Sie über den psql-Client remote auf die Postgres-Datenbank auf dem Server zugreifen

0
ItsmeJulian

Dies kann zum Beispiel irgendetwas verursachen. Mein Problem wurde für einen Tippfehler in Konfigurationsdateien verursacht . Einige Leute sagen, dass sie durch Zertifikatsdateien verursacht wurden, eine andere Gruppe sagt, dass sie durch nicht übereinstimmende lokale Variablen verursacht wurde.

Wenn Sie keine Lösung für Ihr Problem finden können, entfernen Sie Postgres und installieren Sie sie erneut. Dies ist die beste Lösung.

0
Selcuk Ayhan

Während der Neuinstallation von Postgresql. Standardmäßig werden Benutzername und Kennwort als "Postgres" zugewiesen. Die Funktion dieses RDBMS besteht darin, dem neuen Benutzer eine Rolle hinzuzufügen und die Datenbank zu erstellen. Wenn Sie solche Fehler erhalten:

  1. melden Sie sich als Standardbenutzername an:

    root @ kalilinux: ~ # Sudo -i -u postgres

  2. ype psql für interaktive Eingabeaufforderung

    postgres @ kalilinux: ~ $ psql

  3. Um die Eingabeaufforderung zu beenden, verwenden Sie

    \ q

  4. Neue Benutzerrolle erstellen

    postgres @ kalilinux: ~ $ createuser --interactive

Jetzt befinden Sie sich in interacive psql Shell. Genießen. Vergessen Sie nicht, sich mit Ihrem Benutzernamen anzumelden und geben Sie psql für Shell ein.

0
Suman Astani

Mein Problem mit dieser Fehlermeldung war in falschen Berechtigungen für Schlüssel- und Pem-Zertifikate, die ich manipuliert habe. Was mir sehr geholfen hat, war: /Var/log/postgresql/postgresql-9.5-main.log Wo sind alle Fehler.

0
fDebef

Ich habe dieses Problem durch Überprüfen meines Dateisystems gelöst. Die Festplatte war vollständig belegt und die Datenbank konnte daher nicht gestartet werden

verbindungen auf Unix-Domain-Socket "/var/run/postgresql/.s.PGSQL.5432" ?

Ich habe eine Reihe von Fehlerbehebungsversuchen ausprobiert, bis ich die Festplattennutzung überprüft und festgestellt habe, dass sie voll ist.

df -h
cd /var/log/odoo/
cat /dev/null > odoo-server.log
reboot
0
Hafeez Oguntola

Ich war mit demselben Problem konfrontiert

Sudo su - postgres
initdb --locale en_US.UTF-8 -D /var/lib/postgres/data
exit
Sudo systemctl start postgresql
Sudo systemctl status postgresql

Das hat bei mir funktioniert.

0
Aashutosh Rathi

Ich hatte das gleiche problem Es scheint, dass es keinen Socket gibt, wenn es keinen Cluster gibt.

Die Standardclustererstellung schlug während der Installation fehl, da kein Standardgebietsschema festgelegt wurde.

0
JulienCC