selbstgebraut. Dienst kann nicht gestartet werden. get "Bootstrap failed: 5: Input/output error - Postgres - Mac

Ich versuche, Postgres über Home-Brew auf dem Mac neu zu installieren. Ich habe Postgres deinstalliert, Home-Brew aktualisiert und den Installationsbefehl für ausgeführtbrew install postgres

wenn ich laufebrew services start postgresql

Ich erhalte die folgende Fehlermeldung:

Bootstrap fehlgeschlagen: 5: Ein-/Ausgabefehler Fehler: Fehler beim Ausführen; /bin/launchctl bootstrap gui/501 /Users/edac/Library/LaunchAgents/homebrew.mxcl.postgresql.plistmit 5 beendet.

Wenn ich versuche, einen Server über die Postgres-App zu starten, erhalte ich diese Meldung:

Required PostgreSQL version not installed

The data directory was initialized with PostgreSQL 13.

This copy of Postgres.app includes the following PostgreSQL versions: 14.

Please try downloading a different release of Postgres.app.

Als ich ursprünglich Postgres installiert habe, habe ich nur das Home-Brew-CLI ausgeführt und die App installiert, und ich konnte loslegen. Nicht sicher, was schief gelaufen ist.

Sie haben bereits Datenbanken auf Ihrem System. Wenn Sie sie noch benötigen, werfen Sie einen Blick auf postgresql.org/docs/current/pgupgrade.html

Antworten (5)

Das Problem ist, dass die vorherige Installation von Postgres Postgres 13 war und eine Datenbank erstellt wurde unter:

/usr/local/var/postgres

die jetzt nicht mit der Version von Postgres kompatibel ist, die Sie installieren, nämlich Version 14.

Erste Frage: Sind Ihnen Ihre Daten wichtig?

Wenn nicht, können Sie diesen Ordner einfach löschen und versuchen, den Dienst neu zu starten.

Um den Dienst zu löschen und neu zu starten, tun Sie Folgendes:

rm -rf /usr/local/var/postgres
initdb --locale=C -E UTF8 /usr/local/var/postgres
brew services start postgresql

Andernfalls müssen Sie postgresql@13 installieren und eine Datenbankmigration durchführen, die wie folgt zusammengefasst werden kann:

Installieren Sie älteres Postgres und stellen Sie sicher, dass es gestoppt ist

brew install postgresql@13
brew services stop postgresql@13
brew services stop postgres

Löschen Sie die Postgres 13-Datenbank, die durch die Installation von postgresql@13 erstellt wurde

rm -rf /usr/local/var/postgresql@13

Alte Daten in kompatiblen Treiberordner verschieben:

mv /usr/local/var/postgres /usr/local/var/postgresql@13

Jetzt führen wir das Upgrade durch. Zuerst cd in den Datenbankordner

cd /usr/local/var

Erstellen Sie eine neue leere Datenbank mit Gebietsschema C und UTF8-Codierung

initdb --locale=C -E UTF8 -D postgres

Führen Sie das Upgrade selbst durch:

pg_upgrade -d postgresql@13 -D postgres -b /usr/local/Cellar/postgresql@13/13.4/bin -B /usr/local/Cellar/postgresql/14.0/bin -v

Dies sollte mit Erfolg enden. Wenn dies nicht der Fall ist (z. B. Gebietsschema/Codierung ist falsch), wählen Sie das Gebietsschema und die Codierung, die der Datenbank entsprechen.

Starten Sie abschließend den Postgres-Dienst neu:

brew services start postgresql

Das Problem ist wirklich, was @Petesh gesagt hat. Aber die Lösung für mich war einfacher.

Wenn Sie Ihr postgresql mit Brew aktualisieren, wird eine Erfolgsmeldung protokolliert. Eine Sache, die registriert wird, ist:

To migrate existing data from a previous major version of PostgreSQL run:
  brew postgresql-upgrade-database

Sie müssen also nur den folgenden Befehl ausführen:

brew postgresql-upgrade-database

Und natürlich müssen Sie den Dienst neu starten:

brew services restart postgresql

Wenn Sie sicherstellen möchten, dass es funktioniert hat, können Sie auch den Startbefehl ausführen:

brew services start postgresql
cool - ich wusste nicht, dass es dafür einen Brühhelfer gibt
Ich musste den Befehl zweimal ausführen, aber das ist derjenige, der es behoben hat.

Ich hatte ein ähnliches Problem mit postgresql 11 und ein Neustart des Dienstes hat nicht geholfen. Das Problem trat auf, als mein MacBook abrupt neu gestartet wurde.

Nachdem ich die Ports überprüft und alle möglichen Lösungen ausprobiert hatte, beschloss ich, in die Protokolle zu schauen.

tail -n 100 /usr/local/var/log/postgresql@11.log

Dies gab mir die letzten 100 Zeilen des Protokolls, wo ich Folgendes fand:

FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 479) running in data directory "/usr/local/var/postgresql@11"?

Das Problem lag eindeutig bei postmaster.pid, also habe ich es gelöscht:

rm /usr/local/var/postgresql@11/postmaster.pid

Postgres-Dienst erneut gestartet:

brew services start postgresql@11

und voila! Es funktionierte.

Dies hat auch für mich funktioniert. Hatte das gleiche Problem, Postgres funktionierte nicht, nachdem mein MacBook abrupt heruntergefahren war. Der Speicherort meiner PID-Datei war/opt/homebrew/var/postgres/postmaster.pid

Es scheint, dass der postgresqlbereits gestartet wurde, bevor der Startbefehl ausgeführt wurde.

Starten Sie es also neu, anstatt es zu starten, mit dem folgenden Befehl:

brew services restart postgresql

Ich hatte das für Apache. Um das Problem zu beheben, habe ich die Plist-Datei entladen. In Ihrem Fall

launchctl unload /Users/edac/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
launchctl load /Users/edac/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

Dann habe ich den Befehl start services erneut ausgeführt und es hat funktioniert.

brew services start postgresql
Das hat bei mir funktioniert. Das Problem, das ich hatte, war, dass es immer wieder als Root-Benutzer ausgeführt werden wollte. /usr/local/var/log/postgres.log besagt, dass die "root"-Ausführung des PostgreSQL-Servers nicht erlaubt ist. Der Server muss unter einer nicht privilegierten Benutzer-ID gestartet werden, um eine mögliche Gefährdung der Systemsicherheit zu verhindern. Weitere Informationen zum ordnungsgemäßen Starten des Servers finden Sie in der Dokumentation. Wenn Sie diese Schritte ausführen, kann „Brew Services Start Postgresql“ funktionieren, indem es aus irgendeinem Grund als Ich anstelle von Root ausgeführt wird.