Ich verwende Postgres von Homebrew in meinem OS X, aber wenn ich mein System neu starte, wird das Postgres manchmal nach dem Neustart nicht gestartet. Daher habe ich manuell versucht, es zu starten postgres -D /usr/local/var/postgres
, aber dann trat der Fehler mit der folgenden Meldung auf : FATAL: could not open directory "pg_tblspc": No such file or directory
.
Das letzte Mal, als es auftrat, konnte ich es nicht in den ursprünglichen Zustand versetzen, also entschied ich mich, das gesamte Postgres-System zu deinstallieren und es dann neu zu installieren und Benutzer, Tabellen, Datensätze usw. zu erstellen. Es war so ekelhaft, aber Es tritt häufig auf meinem System auf, etwa einmal in einigen Monaten.
Warum verliert es die pg_tblspc
Datei häufig? Und kann ich etwas tun, um den Verlust der Datei zu vermeiden?
Ich habe mein Homebrew und Postgres nicht auf die neueste Version aktualisiert (dh ich habe dieselbe Version verwendet). Außerdem habe ich in der Postgres-Datenbank nur die Tabelle gelöscht und die neuen Daten jeden Tag aufgefüllt. Ich habe den Benutzer, das Passwort usw. nicht geändert.
EDIT (mbannert): Ich hatte das Bedürfnis, dies hinzuzufügen, da der Thread der Top-Hit bei Google für dieses Problem ist und für viele das Symptom anders ist. Homebrewer werden wahrscheinlich auf diese Fehlermeldung stoßen:
No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Wenn Sie dies erst nach dem Yosemite-Upgrade erlebt haben, können Sie diesen Thread jetzt lesen.
quelle
pg_tblspc
ist ein Verzeichnis . Die einzige Möglichkeit, dieses Verzeichnis zu sehen und nur dieses Verzeichnis, das zufällig verschwindet, ist eine Beschädigung des Dateisystems oder ein besonders schlecht benommener Virenscanner oder ein Dateisynchronisierungstool.tablespaces
ist, also glaube ich nicht, dass ich es auf einen externen Speicher gestellt habe.pg_tblspc
verschwindet nicht einfach auf einem System, auf das ich jemals gestoßen bin, und ich kann mir auch keinen vernünftigen Grund dafür vorstellen. Es wird sehr schwer zu sagen sein, was Ihr System ohne viel mehr Details anders macht.Antworten:
Gelöst ... teilweise.
Anscheinend werden durch die Installation der neuesten Versionen von OS X (z. B. Yosemite oder El Capitan) einige Verzeichnisse entfernt
/usr/local/var/postgres
.Um dies zu beheben, erstellen Sie einfach die fehlenden Verzeichnisse neu:
Oder genauer gesagt ( dank Nate ):
Durch erneutes Ausführen wird
pg_ctl start -D /usr/local/var/postgres
der Server jetzt normal und zumindest für mich ohne Datenverlust gestartet .AKTUALISIEREN
Auf meinem System sind einige dieser Verzeichnisse leer, selbst wenn Postgres ausgeführt wird. Vielleicht entfernt Yosemite im Rahmen eines "Reinigungsvorgangs" alle leeren Verzeichnisse? Auf jeden Fall habe ich in jedem Verzeichnis eine '.keep'-Datei erstellt, um ein zukünftiges Löschen zu verhindern.
Hinweis : Das Erstellen der
.keep
Datei in diesen Verzeichnissen führt zu Rauschen in Ihrer Protokolldatei, scheint jedoch keine negativen Auswirkungen auf andere Elemente zu haben.quelle
mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/
undtouch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/.keep
could not open temporary-files directory "pg_tblspc/.keep/PG_9.3_201306121/pgsql_tmp": Not a directory
mkdir /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp,pg_replslot}
Donavans Antwort ist genau richtig. Ich wollte nur hinzufügen, dass ich, da ich verschiedene Dinge mit der Datenbank gemacht habe (z. B.
rake db:test
), nach verschiedenen Verzeichnissen gesucht habe, die oben nicht erwähnt wurden und ersticken würden, wenn sie nicht vorhanden wären In meinem Fallpg_logical/mappings
möchten Sie möglicherweise ein Terminal einrichten, das ausgeführt wird:und achten Sie auf fehlende Ordner, während Sie Ihre typischen Datenbankaktivitäten durchlaufen.
quelle
Dies ist etwas unangebracht, aber hier im Rahmen des PostgreSQL Yosemite-Wiederherstellungsprozesses erwähnenswert. Ich hatte das gleiche Problem wie oben UND ich hatte ein Problem mit PostgreSQL, das "scheinbar" im Hintergrund lief, sodass ich selbst nach dem Hinzufügen von Verzeichnissen nicht neu starten konnte. Ich habe versucht
pg_ctl stop -m fast
, den PostgreSQL-Server zu töten, aber kein Glück. Ich habe auch versucht, den Prozess direkt mit zukill PID
verfolgen, aber sobald ich dies tat, erschien ein PostgreSQL-Prozess mit einer anderen PID erneut.Der Schlüssel war eine
.plist
Datei, die Homebrew geladen hatte ... Das Update für mich war:Danach konnte ich PostgreSQL normal starten.
quelle
launchctl unload ${HOME}/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
aber im Grunde war das auch das gleiche Problem für mich und die gleiche Lösung.Die fehlenden Verzeichnisse müssen in Ihrem PostgreSQL-Datenverzeichnis vorhanden sein. Das Standarddatenverzeichnis ist
/usr/local/var/postgres/
. Wenn Sie ein anderes Datenverzeichnis eingerichtet haben, müssen Sie die fehlenden Verzeichnisse dort neu erstellen. Wenn Sie die von Homebrew empfohlene.plist
Datei geändert haben , mit der PostgreSQL gestartet wird, finden Sie das Datenverzeichnis dort:(Es ist die
-D
Option, mit der Sie Postgres gestartet haben :)Im obigen Beispiel würden Sie die fehlenden Verzeichnisse
/usr/local/pgsql/data
wie folgt erstellen :quelle
Das Erstellen der fehlenden Verzeichnisse funktioniert sicherlich, aber ich habe es behoben, indem ich postgres db neu initialisiert habe. Dies ist ein sauberer Ansatz, um zukünftige Probleme zu vermeiden.
HINWEIS: Mit diesem Ansatz werden vorhandene Datenbanken gelöscht
quelle