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.plist
mit 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.
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
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.
/opt/homebrew/var/postgres/postmaster.pid
Es scheint, dass der postgresql
bereits 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
kein Hang