Postgres - FATAL: i file di database non sono compatibili con il server


186

Dopo aver riavviato il mio MacBook Pro, non riesco ad avviare il server database:

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"?

Ho controllato i registri e la seguente riga appare ripetutamente:

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 era la versione preinstallata sul Mac, 9.2 [.4] è la versione che ho installato tramite Homebrew. Come accennato, questo funzionava prima del riavvio, quindi in realtà non può essere un problema di compilazione. Ho anche rieseguito initdb /usr/local/var/postgres -E utf8e il file esiste ancora.

Sfortunatamente, sono abbastanza nuovo su Postgres, quindi qualsiasi aiuto sarebbe molto apprezzato.


1
Come si avvia Postgres? Sei sicuro che il tuo script di avvio indichi la nuova versione? Perché in base ai messaggi di errore penso che entrambe le versioni siano installate fianco a fianco ora.
fvu,

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start- e la risposta èserver starting
klaffenboeck il

1
Quando cerchi file di nome pg_ctl sono abbastanza sicuro che troverai 2 copie. E quella corrispondente which pg_ctlsarà la vecchia versione e l'altra sarà la nuova versione.
fvu,

running pg_ctl --versionpg_ctl (PostgreSQL) 9.2.4
klaffenboeck il

2
@EvanCarroll Sicuro allora. Penso che ora lo abbiano spostato per raggrupparlo all'interno Server.appe nascosto per utilizzare una porta non predefinita e una directory socket unix. Finalmente!
Craig Ringer,

Risposte:


366

Se hai aggiornato di recente a 11 o 12 da 10.x puoi eseguire il comando seguente per aggiornare la tua directory di dati postgres conservando tutti i dati:

brew postgresql-upgrade-database

Il comando sopra è preso dall'output di brew info postgres


2
Questo ha funzionato come un incantesimo, tuttavia, dopo che ha funzionato, ha introdotto un secondo errore, ricorda di aggiornare il db creato da initdb usando brew postgresql-upgrade-databasequindi riavviare postgres
Shemogumbe

Ha funzionato anche da 9.5 a 11. Complimenti per aver mostrato anche come usare brew info.
yacc

2
Dal 10 all'11.5. Sei un salvavita. <3
Thomas,

4
Funziona anche per 11 a 12.
Stevex,

1
Funziona dalle 9.5 alle 12 !!
Augusto Samamé Barrientos il

169

Se stai cercando l'opzione nucleare (elimina tutti i dati e ottieni un nuovo database), puoi fare:

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

e quindi dovrai rake db:setupe rake db:migratedalla tua app Rails per riavviare la configurazione.


3
Se quanto sopra non funziona ancora (che è stato il caso per me), prova a dare un nuovo nome di directory di dati a initdb, ad esempio / usr / local / var / postgres95.
Mpelzsherman,

tra l'altro, subito dopo probabilmente dovrai correre createuser -s your_rails_appper creare l'utente postgres delle rotaie. Vedere stackoverflow.com/questions/11919391/...
Meekohi

38

Prova questo: https://gist.github.com/joho/3735740

Ha funzionato perfettamente per me. Alla fine genera anche 2 script bash per controllare il tuo DB e rimuovere il vecchio cluster. Davvero fantastico.

vedi: http://www.postgresql.org/docs/9.2/static/pgupgrade.html per saperne di più.


2
Ha funzionato perfettamente per me con la migrazione da 9.4 a 9.5.
tftdias,

Ha funzionato anche per me con la migrazione dalla 9.3.4 alla 9.5.2.
Steve Jorgensen,

1
Ecco i passaggi per l'aggiornamento da 9.5.5 a 9.6.1 usando Homebrew (macOS): gist.github.com/giannisp/b53a76047b07751ed3ade3c1db1d2c51
Giannis

Questa dovrebbe essere sicuramente la risposta migliore !! E nessuna perdita di dati.
FlorianB,

9

Trovato su internet, questa soluzione funziona bene per me.

Quando ho provato ad avviare il server postgresql dopo l'aggiornamento a OS X 10.10 Yosemite, ho riscontrato un problema successivo:

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"?

Bene, diamo un'occhiata ai registri del server:

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.

Quindi, dopo l'aggiornamento postgresql, dobbiamo seguire alcuni passaggi:

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

Questo è tutto.


1
Ho usato i passaggi precedenti per aggiornare da 9.53 a 10.0. Il comando pg_upgrade si è leggermente aggiornato. Il nuovo comando è 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,

soluzione migliore di seguito
Gady,

8

Se vuoi mantenere la versione precedente di postgres, usa 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

In caso contrario, considerare questo comando birra per migrare i dati esistenti: brew postgresql-upgrade-database. Controlla il codice sorgente .


1

Mi è successo quando stavo cercando di avviare Postgres12 con il volume montato di postgres11. L'eliminazione del volume montato per postgres11 e il riavvio hanno funzionato per me.

In precedenza stavo usando:

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

Ho cancellato / Users / champ / postgres e ho riavviato postgres 12, usando

docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:12
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.