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.


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


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.


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 .


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.


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 .


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.