web-dev-qa-db-fra.com

PostgreSQL: pg_upgrade échoue parce que hstore incompatible

J'essaie de migrer de PostgreSQL 9.4.5_2 -> 9.5.3

J'essaie d'utiliser pg_upgrade (à partir de la distribution de 9.5.3) et d'obtenir l'erreur suivante:

pg_dump: [archiver (db)] query failed: ERROR:  incompatible library "/usr/local/lib/postgresql/hstore.so": version mismatch

Quelqu'un sait comment réparer ceci? dois je pg_dumpall puis recharger? Cela a travaillé dans le passé. Essayer d'utiliser pg_upgrade Pour enregistrer certaines étapes.

3
Meltemi

J'ai donc le même problème maintenant que 9.6.1 est sorti. Voici la seule chose que j'ai trouvée jusqu'à présent en ligne mais je n'ai pas encore essayé pour moi-même. Je vais mettre à jour cette réponse une fois que j'ai pu réussir à résoudre le problème.

Edit: J'ai suivi ces étapes et tout fonctionne bien. J'espère que lorsque je passe à 9,7, cela ne sera pas si difficile.

Actuellement sur 9.5.4_1

Mise à niveau vers 9.6.1

La réponse ci-dessous est prise à partir de cela Commentaire avec la réponse fournie par Felix Bünemann. J'ai modifié les étapes de mes numéros de version (voir ci-dessus) et développé certaines des étapes avec des explications.

1) Bien que toujours sur [9.5], assurez-vous que vos bases de données HSTORE n'utilisent plus l'opérateur de dépréciation =>

$ for db in `echo 'SELECT datname FROM pg_database;' |/usr/local/Cellar/postgresql/9.5.4_1/bin/psql -t`;do echo $db; echo 'ALTER EXTENSION "hstore" UPDATE;' | /usr/local/Cellar/postgresql/9.5.4_1/bin/psql $db;done

En cours d'exécution dans la terminale, bouclez essentiellement chacune de vos bases de données et tente de mettre à jour l'extension HSTORE pour chacun. Voir ICI pour plus de détails. Il y a un peu

2) STOP [9.5] SERVER, BREW Mise à niveau PostgreSQL et InitiDDB Le nouveau répertoire de données comme dans le guide

Ces étapes sont décrites dans l'article principal et dans mon cas ont déjà été effectuées par ce point.

  1. $ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
  2. $ brew update && brew upgrade postgresql
  3. $ initdb /usr/local/var/postgres9.6 -E utf8

Les 3 prochaines étapes consistent à créer 3 scripts shell pour remplacer (ou envelopper) 3 des programmes utilisés dans le processus de mise à niveau qui sera expliqué ultérieurement.

3) Renommer [9.6] pg_ctl sur pg_ctl.bak et créer une enveloppe de shell comme pg_ctl:

#!/bin/sh
ln -sf /usr/local/Cellar/postgresql/9.6.1/lib/postgresql /usr/local/lib/
exec /usr/local/Cellar/postgresql/9.6.1/bin/pg_ctl.bak "$@"

4) Renommez [9.6] pg_dump à pg_dump.bak et créez une enveloppe de shell pg_dump:

#!/bin/sh
ln -sf /usr/local/Cellar/postgresql/9.5.4_1/lib/postgresql /usr/local/lib/
exec /usr/local/Cellar/postgresql/9.6.1/bin/pg_dump.bak "$@"

5) Renommez [9.6] pg_dumpall à pg_dumpall.bak et créez un wrapper shell pg_dumpall:

#!/bin/sh
ln -sf /usr/local/Cellar/postgresql/9.5.4_1/lib/postgresql /usr/local/lib/
exec /usr/local/Cellar/postgresql/9.6.1/bin/pg_dumpall.bak "$@"

6) rendre les wrappers exécutables avec chmod + x

$ chmod +x pg_ctl pg_dump pg_dumpall

Comme indiqué dans un commentaire ultérieur de Felix:

Essentiellement ce que les wrappers shell font sont échangés entre les [9.6.1] et [9.5.4] des répertoires libérés aux points de droite du processus de migration. Parce que pg_dump a besoin de [9.5] versions et pg_ctl démarre le serveur qui nécessite les [9.6].

Rappelez-vous à nouveau que je échangeons mes versions pour tout ce que vous devrez faire aussi.

7) Démarrer pg_upgrade comme dans le guide (cela fonctionne également avec le commutateur -K, si vous êtes bas sur espace, comme moi)

pg_upgrade -d /usr/local/var/postgres -D /usr/local/var/postgres9.6 -b /usr/local/Cellar/postgresql/9.5.4_1/bin/ -B /usr/local/Cellar/postgresql/9.6.1/bin/ -v

8) Retirez les wrappers Shell et renommez les fichiers .bak sur leur nom d'origine.

9) Échangez vos répertoires de données comme dans le guide

$ mv /usr/local/var/postgres /usr/local/var/postgres9.5
$ mv /usr/local/var/postgres9.6 /usr/local/var/postgres

10) Démarrez le serveur [9.6] et analysez-le à l'aide du script généré analyser_all.sh.

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
  # or, if you're running a current version of Homebrew
$ brew services start postgresql

11) Profitez de Postgres 9.6 et prenez-vous un café pour travailler avec succès autour du buggy pg_upgrade

Remarque: Si vous utilisez le gemme PG pour les rails, vous devriez recompiler:

$ gem uninstall pg
$ gem install pg
2
John Kacz