Postgres - FATAL: les fichiers de base de données sont incompatibles avec le serveur

187

Après avoir redémarré mon MacBook Pro, je ne parviens pas à démarrer le serveur de base de données:

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

J'ai vérifié les journaux et la ligne suivante apparaît encore et encore:

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 était la version préinstallée sur le mac, 9.2 [.4] est la version que j'ai installée via Homebrew. Comme mentionné, cela fonctionnait avant le redémarrage, il ne peut donc pas s'agir d'un problème de compilation. J'ai également relancé initdb /usr/local/var/postgres -E utf8et le fichier existe toujours.

Malheureusement, je suis assez nouveau sur Postgres, donc toute aide serait très appréciée.

Klaffenboeck
la source
1
Comment commencez-vous postgres? Êtes-vous sûr que votre script de démarrage pointe vers la nouvelle version? Parce que sur la base des messages d'erreur, je pense que les deux versions sont installées côte à côte maintenant.
fvu
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start- et la réponse estserver starting
klaffenboeck
1
Lorsque vous recherchez des fichiers nommés, pg_ctl je suis presque sûr que vous allez en trouver 2 copies. Et celui qui correspondra which pg_ctlsera l'ancienne version, et l'autre sera la nouvelle version.
fvu
courir pg_ctl --versiondonnepg_ctl (PostgreSQL) 9.2.4
klaffenboeck
2
@EvanCarroll Sure l'a fait alors. Je pense maintenant qu'ils l'ont déplacé pour le regrouper à l'intérieur Server.appet l'ont caché pour utiliser un port non par défaut et un répertoire de socket unix. Finalement!
Craig Ringer

Réponses:

367

Si vous avez récemment mis à niveau vers 11 ou 12 à partir de 10.x, vous pouvez exécuter la commande ci-dessous pour mettre à niveau votre répertoire de données postgres en conservant toutes les données:

brew postgresql-upgrade-database

La commande ci-dessus est tirée de la sortie de brew info postgres

Gowtham Gopalakrishnan
la source
2
Cela a fonctionné comme un charme, cependant, après avoir fonctionné, il a introduit une deuxième erreur, n'oubliez pas de mettre à jour la base de données créée par initdb en utilisant brew postgresql-upgrade-databasepuis redémarrez postgres
Shemogumbe
A également travaillé sur 9,5 à 11. Félicitations pour avoir également montré comment utiliser brew info.
yacc
2
De 10 à 11,5. Tu es un sauveur. <3
Thomas
4
Fonctionne également pour 11 à 12 ans.
stevex
1
Fonctionne de 9,5 à 12 !!
Augusto Samamé Barrientos le
169

Si vous recherchez l'option nucléaire (supprimez toutes les données et obtenez une nouvelle base de données), vous pouvez faire:

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

puis vous devrez aller rake db:setupet venir rake db:migratede votre application Rails pour recommencer la configuration.

Meekohi
la source
3
Si ce qui précède ne fonctionne toujours pas (ce qui était le cas pour moi), essayez de donner un nouveau nom de répertoire de données à initdb, par exemple / usr / local / var / postgres95.
mpelzsherman
btw, immédiatement après cela, vous devrez probablement exécuter createuser -s your_rails_apppour créer l'utilisateur postgres des rails. Voir stackoverflow.com/questions/11919391/…
Meekohi
38

Essayez ceci: https://gist.github.com/joho/3735740

Cela a parfaitement fonctionné pour moi. En fin de compte, il génère également 2 scripts bash pour vérifier votre base de données et supprimer l'ancien cluster. Vraiment génial.

voir: http://www.postgresql.org/docs/9.2/static/pgupgrade.html pour en savoir plus.

Gdurelle
la source
2
A parfaitement fonctionné pour moi avec la migration de 9.4 à 9.5.
tftdias le
A également travaillé pour moi avec la migration de 9.3.4 vers 9.5.2.
Steve Jorgensen
1
Voici les étapes pour mettre à jour 9.5.5 vers 9.6.1 à l'aide de Homebrew (macOS): gist.github.com/giannisp/b53a76047b07751ed3ade3c1db1d2c51
Giannis
Cela devrait certainement être la meilleure réponse !! Et aucune perte de données.
FlorianB
9

Trouvé sur Internet, cette solution fonctionne très bien pour moi.

Lorsque j'ai essayé de démarrer le serveur postgresql après la mise à niveau vers OS X 10.10 Yosemite, j'ai rencontré un problème suivant:

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

D'accord, jetons un œil aux journaux du serveur:

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.

Nous devons donc suivre quelques étapes après la mise à niveau 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

C'est tout.

Gianluca Musa
la source
1
J'ai utilisé les étapes ci-dessus pour passer de 9.53 à 10.0. La commande pg_upgrade a légèrement évolué. La nouvelle commande est 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
meilleure solution ci
Gady
8

Si vous souhaitez conserver la version précédente de postgres, utilisez 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

Sinon, envisagez cette commande BREW pour migrer les données existantes: brew postgresql-upgrade-database. Consultez le code source .

peresleguine
la source
1

Cela m'est arrivé lorsque j'essayais de démarrer Postgres12 avec un volume postgres11 monté. La suppression du volume monté pour postgres11 et le redémarrage ont fonctionné pour moi.

Auparavant, j'utilisais:

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

J'ai supprimé / Users / champ / postgres et redémarré postgres 12, en utilisant

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