Postgres - FATAL: Datenbankdateien sind nicht mit dem Server kompatibel

185

Nach dem Neustart meines MacBook Pro kann ich den Datenbankserver nicht starten:

could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

Ich habe die Protokolle überprüft und die folgende Zeile wird immer wieder angezeigt:

FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 9.2, which is not compatible with this version 9.0.4.

9.0.4 war die Version, die auf dem Mac vorinstalliert war. 9.2 [.4] ist die Version, die ich über Homebrew installiert habe. Wie bereits erwähnt, funktionierte dies vor dem Neustart, sodass es sich nicht um ein Kompilierungsproblem handeln kann. Ich habe auch erneut ausgeführt initdb /usr/local/var/postgres -E utf8und die Datei existiert noch.

Leider bin ich ziemlich neu bei Postgres, daher wäre jede Hilfe sehr dankbar.

klaffenboeck
quelle
1
Wie fängst du mit Postgres an? Sind Sie sicher, dass Ihr Startskript auf die neue Version verweist? Aufgrund der Fehlermeldungen denke ich, dass beide Versionen jetzt nebeneinander installiert sind.
fvu
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start- und die Antwort istserver starting
klaffenboeck
1
Wenn Sie nach Dateien mit dem Namen suchen, pg_ctl bin ich mir ziemlich sicher, dass Sie 2 Kopien finden werden. Und die eine, die passt, which pg_ctlwird die alte Version sein, und die andere wird die neue Version sein.
fvu
Laufen pg_ctl --versiongibtpg_ctl (PostgreSQL) 9.2.4
klaffenboeck
2
@EvanCarroll Sicher hat es dann getan. Ich denke, jetzt haben sie es verschoben, um es darin zu bündeln, Server.appund es versteckt, um einen nicht standardmäßigen Port und ein Unix-Socket-Verzeichnis zu verwenden. Schließlich!
Craig Ringer

Antworten:

362

Wenn Sie kürzlich von 10.x auf 11 oder 12 aktualisiert haben, können Sie den folgenden Befehl ausführen, um Ihr Postgres-Datenverzeichnis zu aktualisieren und alle Daten beizubehalten:

brew postgresql-upgrade-database

Der obige Befehl wird aus der Ausgabe von übernommen brew info postgres

Gowtham Gopalakrishnan
quelle
2
Dies funktionierte wie ein Zauber, aber nachdem es funktioniert hatte, führte es einen zweiten Fehler ein. Denken Sie daran, die von initdb erstellte Datenbank zu aktualisieren, indem Sie postgres brew postgresql-upgrade-databaseneu starten
Shemogumbe
Arbeitete auch an 9,5 bis 11. Ein großes Lob dafür, dass Sie auch zeigen, wie man es benutzt brew info.
Yacc
2
Von 10 bis 11.5. Du bist ein Lebensretter. <3
Thomas
4
Funktioniert auch für 11 bis 12.
Stevex
1
Funktioniert von 9,5 bis 12 !!
Augusto Samamé Barrientos
169

Wenn Sie nach der nuklearen Option suchen (alle Daten löschen und eine neue Datenbank erhalten), können Sie Folgendes tun:

rm -rf /usr/local/var/postgres && initdb /usr/local/var/postgres -E utf8

und dann müssen Sie von rake db:setupund zu rake db:migrateIhrer Rails-App, um das Setup erneut zu erhalten.

Meekohi
quelle
3
Wenn das oben genannte Problem immer noch nicht funktioniert (was bei mir der Fall war), geben Sie initdb einen neuen Datenverzeichnisnamen, z. B. / usr / local / var / postgres95.
mpelzsherman
Übrigens müssen Sie unmittelbar danach wahrscheinlich ausführen createuser -s your_rails_app, um den Postgres-Benutzer der Rails zu erstellen. Siehe stackoverflow.com/questions/11919391/…
Meekohi
38

Versuchen Sie Folgendes: https://gist.github.com/joho/3735740

Es hat perfekt für mich funktioniert. Am Ende werden außerdem 2 Bash-Skripte generiert, mit denen Sie Ihre Datenbank überprüfen und den alten Cluster entfernen können. Wirklich unglaublich.

Weitere Informationen finden Sie unter: http://www.postgresql.org/docs/9.2/static/pgupgrade.html .

gdurelle
quelle
2
Funktionierte perfekt für mich mit der Migration von 9.4 auf 9.5.
Tftdias
Arbeitete auch für mich mit der Migration von 9.3.4 auf 9.5.2.
Steve Jorgensen
1
Hier sind die Schritte zum Aktualisieren von 9.5.5 auf 9.6.1 mit Homebrew (macOS): gist.github.com/giannisp/b53a76047b07751ed3ade3c1db1d2c51
Giannis
Das sollte definitiv die beste Antwort sein !! Und kein Datenverlust.
FlorianB
9

Diese im Internet gefundene Lösung funktioniert gut für mich.

Als ich nach dem Upgrade auf OS X 10.10 Yosemite versuchte, den Postgresql-Server zu starten, trat ein nächstes Problem auf:

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

could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Okay, werfen wir einen Blick in die Serverprotokolle:

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

FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 9.2, which is not compatible with this version 9.3.5.

Nach dem Upgrade von postgresql müssen wir also einige Schritte ausführen:

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

mv /usr/local/var/postgres /usr/local/var/postgres92

brew update

brew upgrade postgresql

initdb /usr/local/var/postgres -E utf8

pg_upgrade -b /usr/local/Cellar/postgresql/9.2.3/bin -B /usr/local/Cellar/postgresql/9.3.5_1/bin -d /usr/local/var/postgres92 -D /usr/local/var/postgres

cp /usr/local/Cellar/postgresql/9.3.5_1/homebrew.mxcl.postgresql.plist ~/Library/LaunchAgents/

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

rm -rf /usr/local/var/postgres92

Das ist es.

Gianluca Musa
quelle
1
Ich habe die obigen Schritte verwendet, um ein Upgrade von 9.53 auf 10.0 durchzuführen. Der Befehl pg_upgrade wurde etwas aktualisiert. Der neue Befehl lautet pg_upgrade -b /usr/local/Cellar/postgresql/9.5.3/bin/ -B /usr/local/Cellar/postgresql/10.0/bin -d / usr / local / var / postgres95 -D / usr / local / var / postgres
techvineet
bessere Lösung unten
Gady
8

Wenn Sie die vorherige Version von postgres beibehalten möchten, verwenden Sie brew switch:

$ brew info postgresql

postgresql: stable 10.5 (bottled), HEAD
Object-relational database system
https://www.postgresql.org/
Conflicts with:
  postgres-xc (because postgresql and postgres-xc install the same binaries.)
/usr/local/Cellar/postgresql/9.6.3 (3,259 files, 36.6MB)
  Poured from bottle on 2017-07-09 at 22:15:41
/usr/local/Cellar/postgresql/10.5 (1,705 files, 20.8MB) *
  Poured from bottle on 2018-11-04 at 15:13:13

$ brew switch postgresql 9.6.3
$ brew services stop postgresql
$ brew services start postgresql

Andernfalls sollten Sie diesen Brew-Befehl berücksichtigen, um vorhandene Daten zu migrieren : brew postgresql-upgrade-database. Überprüfen Sie den Quellcode .

peresleguine
quelle
1

Es passierte für mich, als ich versuchte, Postgres12 mit postgres11 gemountetem Volume zu starten. Nur das gemountete Volume für postgres11 zu löschen und neu zu starten, hat bei mir funktioniert.

Zuvor habe ich verwendet:

docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:11

Ich habe / Users / champ / postgres gelöscht und postgres 12 mit neu gestartet

docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:12
anuj kumar
quelle