psql: Verbindung zum Server konnte nicht hergestellt werden: Keine solche Datei oder kein solches Verzeichnis (Mac OS X)

247

Beim Neustart meines Mac wurde der gefürchtete Postgres-Fehler angezeigt:

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

Der Grund dafür ist, dass mein MacBook aufgrund eines nicht damit zusammenhängenden Problems vollständig eingefroren ist und ich mit dem Netzschalter einen harten Neustart durchführen musste. Nach dem Neustart konnte ich Postgres aufgrund dieses Fehlers nicht starten.

Feuerdrache
quelle
1
Stellen
1
Wenn Sie die Antwort hinterlassen, versuchen Sie bitte zu erklären, WARUM dies geschieht oder wie das Postgres-System funktioniert, damit wir nicht alle nur zufällige Dinge ausprobieren.
Nick Res
6
brew reinstall postgresql stackoverflow.com/a/39781473/6086226 arbeitete für mich
Derk Jan Speelman
Brew neu installieren postgresql dies löste mein Problem
Ajay Kumar

Antworten:

420

WARNUNG: Wenn Sie postmaster.pid löschen, ohne sicherzustellen, dass wirklich keine postgresProzesse ausgeführt werden, kann Ihre Datenbank dauerhaft beschädigt werden . (PostgreSQL sollte es automatisch löschen, wenn der Postmaster beendet wurde.)

LÖSUNG: Dies hat das Problem behoben - ich habe diese Datei gelöscht und dann hat alles funktioniert!

/usr/local/var/postgres/postmaster.pid

- -

und hier ist, wie ich herausgefunden habe, warum dies gelöscht werden musste.

  1. Ich habe den folgenden Befehl verwendet, um festzustellen, ob PG-Prozesse ausgeführt wurden. Für mich gab es keine, ich konnte nicht einmal den PG-Server starten:

    ps auxw | grep post
  2. Ich habe nach der Datei .s.PGSQL.5432 gesucht, die in der obigen Fehlermeldung enthalten war. Ich habe den folgenden Befehl verwendet:

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

    Dies zeigte nichts, nachdem ich meinen gesamten Computer durchsucht hatte, so dass die Datei nicht existierte, aber offensichtlich psql"wollte es" oder "dachte, es wäre da".

  3. Ich habe mir meine Serverprotokolle angesehen und den folgenden Fehler festgestellt:

    cat /usr/local/var/postgres/server.log

    Am Ende des Serverprotokolls wird der folgende Fehler angezeigt:

    FATAL:  pre-existing shared memory block (key 5432001, ID 65538) is still in use
    HINT:  If you're sure there are no old server processes still running, remove the shared memory block or just delete the file "postmaster.pid".
  4. Gemäß den Hinweisen in der Fehlermeldung habe ich die Datei postmaster.pid im selben Verzeichnis wie server.log gelöscht. Dies löste das Problem und ich konnte neu starten.

Es scheint also, dass mein MacBook einfriert und hart neu gestartet wird, was Postgres zu der Annahme veranlasste, dass die Prozesse auch nach dem Neustart noch ausgeführt wurden. Löschen dieser Datei behoben. Hoffe das hilft anderen! Viele Leute haben ähnliche Probleme, aber die meisten Antworten hatten mit Dateiberechtigungen zu tun, während in meinem Fall die Dinge anders waren.

Feuerdrache
quelle
9
Hoffentlich hilft diese Antwort jemand anderem und danke der Person, die sie bewertet hat. Trotz des Moderators, der diese Frage als Duplikat markiert hat, ist sie einzigartig und nützlich. Vielen Dank an Stack Overflow für die großartige Seite und die Experten hier für das Teilen!
FireDragon
2
Nur FWIW, das Löschen von postmaster.pid ist gefährlich. Sie müssen wirklich sicher sein, dass keine postgresProzesse ausgeführt werden, bevor Sie dies tun.
Craig Ringer
20
Gute Antwort. Vielen Dank, dass Sie Ihren gesamten Prozess und nicht nur den potenziell zerstörerischen Befehl veröffentlicht haben!
Dojosto
3
Einverstanden. Die Antwort zu postmaster.pid ist gut, aber jeder Schritt, um herauszufinden, ob / wo postgres ausgeführt wird, ist von unschätzbarem Wert . Danke dir!
Clinton
11
Mein Postgres-Log bei Macos war bei /usr/local/var/log/postgres.log.
Ryan Tuck
172

Keines der oben genannten hat bei mir funktioniert. Ich musste Postgres folgendermaßen neu installieren:

  • Deinstallieren Sie postgresql mit Brew: brew uninstall postgresql
  • brew doctor (Repariere was auch immer hier ist)
  • brew cleanup
  • Entfernen Sie alle Postgres-Ordner:

    • rm -r /usr/local/var/postgres
    • rm -r /Users/<username>/Library/Application\ Support/Postgres
  • Postgresql mit Brew neu installieren: brew install postgresql

  • Server starten: brew services start postgresql
  • Sie sollten jetzt Ihre Datenbanken erstellen müssen ... ( createdb)
ypicard
quelle
4
Arbeitete für mich, musste jedoch keine tatsächliche Datenbank entfernen und hatte keinen Ordner im Anwendungssupport. Ich denke, der Punkt war, dass einige Brühelemente während der Installation von Postgres unterbrochene Symlinks hatten. Das Problem wurde behoben, indem sie behoben und erneut Postgres installiert wurden. Vielen Dank!
Kulbi
2
Weder diese noch die Top-Antwort haben bei mir funktioniert, bis ich auch liefbrew postgresql-upgrade-database
ErikAGriffin
Diese funktionierten für mich, außer dass ich die alten Daten nicht löschen musste.
Amal Antony
Zur Bestätigung: Dadurch werden alle Ihre Datenbanken gelöscht. Richtig? Ich konnte mit nur einem auskommen brew reinstall postgresund bestätigte, dass die neueste Hauptversionsnummer von Homebrew Postgres mit meiner aktuellen (kaputten) identisch war.
Jacob Ford
85

Wenn Sie unter macOS arbeiten und postgres über Homebrew installiert haben, starten Sie es mit neu

brew services restart postgresql

Wenn Sie mit Ubuntu arbeiten, können Sie es mit einem dieser Befehle neu starten

sudo service postgresql restart

sudo /etc/init.d/postgresql restart
Jagdish Barabari
quelle
34

Möglicherweise hat dies nichts damit zu tun, aber ein ähnlicher Fehler tritt auf, wenn Sie mit postgresauf eine Hauptversion aktualisieren brew. mit brew info postgresqlherausgefunden, dass dies geholfen hat:

To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
Verrückter Barney
quelle
4
Dies funktionierte für mich vom 11. bis 12. auf Catalina
nzajt
1
Arbeitete auch für mich
leere Wände
15

Hier ist mein Weg:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm /usr/local/var/postgres/postmaster.pid
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
smartworld-dm
quelle
1
Dies funktionierte für mich, als kein anderes Stoppen und Starten / Neustarten / Neuinstallieren von Postgres mit Homebrew durchgeführt wurde. Danke @ smartworld-dm
Bradley
1
Dies ist die Lösung, auf die ich immer zurückkomme. Ich könnte einen Alias ​​hinzufügen, der beim fix-my-postgresqlAusführen dies ausführt :)
Tomas K
1
Irgendeine Idee, warum ich dies jedes Mal tun muss, wenn ich meinen PC neu starte?
stephano
11

Wenn Ihr postmaster.pidGerät weg ist und Sie nicht neu starten können, tun Sie Folgendes:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

wie hier zunächst erklärt

Antoine
quelle
8

Hallo Welt :)
Der beste, aber seltsame Weg für mich war, die nächsten Dinge zu tun.

1) Laden Sie postgres93.app oder eine andere Version herunter . Fügen Sie diese App in den Ordner / Applications / ein.

2) Fügen Sie der Datei .bash_profile(die sich in meinem Home-Verzeichnis befindet) eine Zeile (Befehl ) hinzu:

export PATH = / Applications / Postgres93.app / Contents / MacOS / bin /: $ PATH
Es ist ein Weg psqlvon Postgres93.app. Die Zeile (Befehl) wird bei jedem Start der Konsole ausgeführt.

3) Starten Sie Postgres93.appvom /Applications/Ordner. Es startet einen lokalen Server (Port ist "5432" und Host ist "localhost").

4) Nach all diesen Manipulationen war ich froh, $ createuser -SRDP user_nameandere Befehle auszuführen und zu sehen, dass es funktionierte! Postgres93.appkann bei jedem Systemstart ausgeführt werden.

5) Auch wenn Sie Ihre Datenbanken grafisch anzeigen möchten, sollten Sie installieren PG Commander.app. Es ist eine gute Möglichkeit, Ihre Postgres-Datenbank als hübsche Datentabellen zu betrachten

Natürlich ist es nur für lokale Server hilfreich. Ich würde mich freuen, wenn diese Anleitung anderen hilft, die mit diesem Problem konfrontiert sind.

Crazzyaka
quelle
1
Der Schlüssel hier ist das Hinzufügen von Postgres zu Ihrem Pfad (Schritt 2). Das hat mir geholfen. Wenn Sie Postgres mit Homebrew installiert haben, können Sie es Ihrem Pfad hinzufügen, indem Sie Ihrem .bash_profile die folgende Zeile hinzufügen: export PATH='/usr/local/Cellar/postgresql/9.4.1/bin/':$PATH- Beachten Sie, dass Ihre Versionsnummer möglicherweise unterschiedlich ist.
Tina
7

Dieses Problem hat viele Quellen und damit viele Antworten. Ich habe jeden von ihnen erlebt.

1) Wenn Sie einen Absturz haben, ist das Entfernen der Datei /usr/local/var/postgres/postmaster.pid wahrscheinlich erforderlich, da Postgres möglicherweise nicht richtig damit umgegangen ist. Stellen Sie jedoch sicher, dass kein Prozess ausgeführt wird.

2) Craig Ringer hat in anderen Beiträgen darauf hingewiesen, dass die Bündelung von postgreSQL durch Apple zu Problemen bei der Installation von pg gem führt. Das Festlegen der Umgebungsvariablen PATH ist eine Lösung.

3) Eine andere Lösung besteht darin, den Edelstein zu deinstallieren und neu zu installieren. Möglicherweise ist auch ein Brühupdate erforderlich.

Wenn Sie auf diesen Beitrag stoßen und eine der Quellen genau bestimmen können, sparen Sie Zeit ...

Hieronymus
quelle
3
Ich bin froh, dass ich das gepostet habe. Ein weiterer Absturz und die Antwort kann ziemlich schnell wiedererlangt werden ...
Jerome
6

Für mich war die Lösung einfach, meinen Computer neu zu starten. Ich habe zuerst versucht, mit Brew Services neu zu starten, und als das nicht funktionierte, schien ein Neustart die nächstbeste Option zu sein, bevor ich mich mit einigen der komplizierteren Lösungen befasste. Alles funktionierte wie es sollte.

Matt Lemieux
quelle
5

Ich hatte hier ein ähnliches Problem. Ich habe dieses Problem wie unten gelöst.

Tatsächlich ist der Postgres-Prozess tot. Um den Status von Postgres zu sehen, führen Sie den folgenden Befehl aus

sudo /etc/init.d/postgres status

Es wird angezeigt, dass der Prozess tot ist. Starten Sie einfach den Prozess

sudo /etc/init.d/postgres start
Jagdish Barabari
quelle
Vielen
Dank
4

Dies passierte mir, nachdem mein Mac (High Sierra) eingefroren war und ich ihn manuell neu starten musste (halten Sie den Netzschalter gedrückt). Alles, was ich tun musste, um das Problem zu beheben, war ein sauberer Neustart.

skwidbreth
quelle
3

Mein Problem war schließlich, dass ich Gas Mask (einen Hosts-Dateimanager für Mac) verwendete und in der von mir verwendeten Hosts-Datei keinen Eintrag für localhost hatte.

Ich fügte hinzu:

127.0.0.1 localhost

Und das hat mein Problem gelöst.

jawns317
quelle
3

Ich bin mir nicht ganz sicher warum, aber meine Postgres-Installation wurde ein wenig durcheinander gebracht und einige Dateien wurden gelöscht, was zu dem Fehler führte, den OP anzeigt.

Trotz der Tatsache, dass ich Befehle wie ausführen brew service retart postgresund die richtigen Nachrichten sehen kann, blieb dieser Fehler bestehen.

Ich ging die Postgres-Dokumentation durch und stellte fest, dass meine Datei /usr/local/var/postgresvöllig leer war. Also habe ich folgendes ausgeführt:

initdb /usr/local/var/postgres

Es scheint, dass einige Konfigurationen mit diesem Befehl stattgefunden haben.

Dann bat es mich, dies auszuführen:

postgres -D /usr/local/var/postgres

Und das sagte mir, dass bereits eine postmaster.pid-Datei existiert.

Ich musste nur wissen, ob Brew die Konfigurationen, die ich gerade ausgeführt habe, aufnehmen kann, also habe ich sie getestet.

ls /usr/local/var/postgres

Das zeigte mir eine postmaster.pid Datei. Ich habe es dann getan brew services stop postgresqlund die Datei postmaster.pid ist verschwunden. Dann tat ich es brew services start postgresqlund VIOLA, die Datei erschien wieder.

Dann habe ich meine App ausgeführt, die tatsächlich den Server gefunden hat, aber meine Datenbanken scheinen verschwunden zu sein.

Obwohl ich weiß, dass sie möglicherweise überhaupt nicht verschwunden sind, hat die neue Initialisierung möglicherweise einen neuen Datenbereich erstellt, und auf den alten wird nicht verwiesen. Ich müsste mir ansehen, wo sich das befindet, und es wieder anzeigen oder einfach meine Datenbanken erneut erstellen.

Hoffe das hilft! Das Lesen der Postgres-Dokumente hat mir sehr geholfen. Ich hasse es, Antworten zu lesen, die lauten: "Fügen Sie dies ein, es funktioniert!" weil ich nicht weiß, was zum Teufel passiert und warum.

Nick Res
quelle
2

Es gibt viele Ursachen für diesen Fehler. Suchen Sie daher zuerst Ihre Protokolldatei und überprüfen Sie sie auf Hinweise. Es könnte an /usr/local/var/log/postgres.logoder /usr/local/var/postgres/server.logoder möglicherweise anderswo sein. Wenn Sie mit Homebrew installiert haben, finden Sie den Speicherort in ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist.

Tamlyn
quelle
2

Ich hatte das gleiche Problem. In den meisten Fällen ist das Problem die Tatsache, dass eine übrig gebliebene Datei vorhanden ist

/usr/local/var/postgres/postmaster.pid

Das funktioniert für die meisten Leute, aber mein Fall war anders - ich habe versucht, dieses Problem in den letzten 3 Stunden zu googeln, postresql unter OSX durch Brauen deinstalliert, die Datenbank gelöscht, nichts hat funktioniert.

Schließlich bemerkte ich, dass ich ein Problem mit dem Brauen hatte, das immer dann auftauchte, wenn ich versuchte, etwas zu installieren:

Error: Permission denied @ rb_sysopen - /private/tmp/github_api_....

oder so ähnlich am Ende einer Installation.

Ich habe es einfach gemacht sudo chmod -R 777 /private/tmpund es funktioniert endlich!

Ich schreibe das auf, weil dies eine Lösung für jemand anderen sein könnte

Maciej Pk
quelle
1

Gehen Sie zu /var/log/ und führen Sie Katze aus. postgres.log Hier finden Sie den Grund für das Versagen von Postgres. Wenn es sich um ein intelligentes Herunterfahren handelt, ist Ihre icu4cVersion (C ++ - Bibliothek für Unicode) wahrscheinlich nicht korrekt, mit der verknüpft ist postgres. Führen Sie also die folgenden Befehle aus.

brew upgrade brew cleanup Das sollte funktionieren ;)

Shishir
quelle
Muss möglicherweise danach laufen, brew stylewenn brew cleanupHomebrew kaputt geht.
olliezhu
0

Ich musste diesen Beitrag mehrmals nachschlagen, um dieses Problem zu lösen. Es gibt einen weiteren Fix, der auch für ähnliche Probleme mit anderen laufenden Programmen gilt.

Ich habe gerade festgestellt, dass Sie die folgenden zwei Befehle verwenden können.

$ top

Dies zeigt alle aktuell ausgeführten Aktionen mit ihren PID-Nummern an. Wenn Sie Postgres und die dazugehörige PID finden

$ kill pid_number

cohart
quelle
0

Ich habe gerade das gleiche Problem, bei dem ich meine Maschine ( ubuntu) zum Update gestellt habe, und habe den folgenden Fehler erhalten:

Verbindung zum Server konnte nicht hergestellt werden: Keine solche Datei oder kein solches Verzeichnis Wird der Server lokal ausgeführt und akzeptiert Verbindungen auf dem Unix-Domain-Socket "/var/run/postgresql/.s.PGSQL.5432"?

Nach Abschluss des Aktualisierungsvorgangs beim Neustart ist mein Systemfehler verschwunden. Und es funktioniert wie zuvor wie Charme. Ich denke, dies geschah, als pg aktualisiert wurde und ein anderer Prozess gestartet wurde.

Gagan Gami
quelle
0

SUPER NEWBIE-ALARM: Ich lerne gerade die Webentwicklung und das spezielle Tutorial, dem ich folgte, erwähnte, dass ich Postgres installieren muss, erwähnte aber nicht, dass ich es auch ausführen muss ... Nachdem ich die Postgres-Anwendung geöffnet hatte, war alles in Ordnung und Dandy.

Lorenzo
quelle
0

Die Antwort von @Jagdish Barabari gab mir den Hinweis, den ich brauchte, um dieses Problem zu lösen. Es stellte sich heraus, dass zwei Versionen von postgresql installiert waren, während nur eine ausgeführt wurde. Das Löschen aller Postgresql-Dateien und die Neuinstallation der neuesten Version haben dieses Problem für mich behoben.

5280Angel
quelle
0

Ich habe / usr / lib aus dem LD_LIBRARY_PATH entfernt und es hat funktioniert. Ich habe in Dockerfile Postgres gearbeitet: alpine.

ddtraveller
quelle