Postgres – FATALE: i file di database sono incompatibili con il server

Dopo il riavvio il mio MacBook Pro non riesco ad avviare il server di 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 log e la seguente riga appare più e più volte:

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, fu la versione che è stato preinstallato su mac, 9.2[.4] è la versione che ho installato tramite Homebrew.
Come detto, questa opera prima del riavvio, quindi in realtà non può essere la compilazione di un problema. Ho anche ri-eseguito initdb /usr/local/var/postgres -E utf8 e il file esiste ancora.

Purtroppo, io sono abbastanza nuovo di Postgres, in modo che qualsiasi aiuto sarebbe molto apprezzato.

  • Come si fa a iniziare a postgres? Siete sicuri che il vostro startscript punti per la nuova versione? Perché sulla base dei messaggi di errore credo che entrambe le versioni sono installati affiancati ora.
  • pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start – e la risposta è server starting
  • Quando si cerca un file di nome pg_ctl sono abbastanza sicuro che si sta andando a trovare in 2 copie. E quello che corrisponde which pg_ctl la vecchia versione, e l’altro sarà la nuova versione.
  • in esecuzione pg_ctl --versionpg_ctl (PostgreSQL) 9.2.4
  • E ancora la copia di pg_ctl sembra essere l’avvio di un 9.0.4 postmaster… hai smesso di postgres prima di eseguire l’aggiornamento tramite homebrew? Così com’è, probabilmente si dovrebbe garantire che tutti postgres processi sono fermato e ripeti l’installazione di 9.2.4
  • ps aux | grep postgres produce nulla, e come ho già detto, è abituato a lavorare molto bene prima – quindi dubito che mi sono incasinato con l’installazione. Pensate che una reinstallazione è il modo migliore per andare?
  • sì, come adesso un 9.2.4 pg_ctl sembra essere l’avvio di un 9.0.4 backend, e che sicuramente è una brutta situazione! Si potrebbe provare a districare il caos manualmente, ma a reinstallare sopra il preesistente mix di versioni in qualche modo sembra più semplice e a prova di bomba per fare (e come sembra che tu abbia appena inizializzato si datadir, il db è vuoto, comunque, in modo da non perdere nulla).
  • OK, vi ringrazio molto
  • l’errore è presente anche dopo la reinstallazione… io sono al mio fine ingegno 🙁
  • Apple folle decisione di pre-installare PostgreSQL e mettere la loro pre-installato la versione sul PERCORSO predefinito, sembra peggiorare con il tempo…
  • davvero? Apple preinstalls postgresql?
  • Certo che l’ha fatto allora. Penso che ora l’hanno spostato in bundle all’interno di Server.app e nascosti per utilizzare una porta non di default e socket unix directory. Finalmente!

 

6 Replies
  1. 155

    Se sei su Mac e recentemente aggiornato a 11 da 10.x è possibile eseguire il seguente comando per aggiornare la postgres directory dei dati di contenimento di tutti i dati:

    brew postgresql-upgrade-database

    Il comando di cui sopra è presa dall’uscita di brew info postgres

    • Questa è la risposta corretta nel 2019.
    • Dopo un po ‘ di ricerche in questo risolto il mio problema. Grazie. Evviva!
    • ha lavorato sulla 9.2 11
    • Questo dovrebbe essere il più semplice e accettato risposta. Maggio 2019
    • uno e fatto, grazie
    • Questo ha funzionato come un fascino, tuttavia, dopo che ha funzionato, è stato introdotto un secondo errore, ricordate di upgrate il db creato da initdb utilizzando brew postgresql-upgrade-database quindi riavviare postgres
    • Lavorato su 9,5 a 11. Complimenti anche per mostrare come utilizzare brew info.
    • Ha salvato la mia vita. Evviva!!
    • Questo ha funzionato come un fascino per me, dopo l’aggiornamento il mio postgres da 10 a 11

  2. 148

    Se siete alla ricerca per il nucleare (per eliminare tutti i dati e ottenere un nuovo database), si può fare:

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

    e quindi avrai bisogno di rake db:setup e rake db:migrate dalla vostra applicazione Rails per ottenere nuovamente il programma di installazione.

    • Se quanto sopra non funziona ancora (che era il caso per me), prova a dargli un nuovo nome di directory per initdb, ad esempio /usr/local/var/postgres95.
    • btw, immediatamente dopo che questo sarà probabilmente necessario eseguire createuser -s your_rails_app per creare i binari’ utente postgres. Vedere stackoverflow.com/questions/11919391/…
  3. 38

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

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

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

    • Ha funzionato perfettamente per me la migrazione da 9.4 9.5.
    • Anche per me ha funzionato con la migrazione da 9.3.4 per 9.5.2.
    • Qui sono i passi per l’aggiornamento 9.5.5 per 9.6.1 utilizzo di Homebrew (macOS): gist.github.com/giannisp/b53a76047b07751ed3ade3c1db1d2c51
    • Che dovrebbe essere sicuramente la migliore risposta!! E nessuna perdita di dati.
  4. 9

    Trovato su internet, questa soluzione funziona bene per me.

    Quando ho cercato di avviare postgresql server dopo l’aggiornamento a OS X 10.10 Yosemite, che ho incontrato con un nuovo problema:

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

    Va bene, consente di dare uno sguardo nel log 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.

    Così, abbiamo bisogno di seguire i pochi passi dopo l’aggiornamento postgresql:

    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

    Che è.

    • Ho usato la procedura per l’aggiornamento da 9.53 a 10.0. Il pg_upgrade comando ha aggiornato un po’. Il nuovo comando è pg_upgrade -b /usr/local/Cantina/postgresql/9.5.3/bin/ -B /usr/local/Cantina/postgresql/10.0/bin -d /usr/local/var/postgres95 -D /usr/local/var/postgres
    • migliore soluzione sotto
  5. 4

    Se si desidera mantenere la precedente versione di postgres, utilizzare 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 infuso di comando per eseguire la migrazione dei dati esistenti: brew postgresql-upgrade-database. Check out il codice sorgente.

  6. 0

    È successo per me quando stavo cercando di avviare Postgres12 con postgres11 volume montato. Solo eliminando il volume montato per postgres11 e riavvio ha 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 riavviato postgres 12, utilizzando

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

Lascia un commento