web-dev-qa-db-fra.com

Comment résoudre une "incompatibilité de version de serveur" avec pg_dump lorsque les deux serveurs PostgreSQL doivent être installés?

J'ai installé deux serveurs PostgreSQL sur mon ordinateur. L'un est 9,1 et l'autre est 9,3. J'ai besoin des deux serveurs installés.

Cependant, lorsque j'exécute pg_dump, une erreur de correspondance de version apparaît:

server version: 9.3.6; pg_dump version: 9.1.15
pg_dump: aborting because of server version mismatch

Comment puis-je le résoudre? (Impossible de désinstaller l'une ou l'autre version - j'ai d'abord installé la 9.1 et la 9.3 plusieurs mois plus tard - j'ai besoin de les deux serveurs de base de données installés).

8
Luis Masuelli

TL; DR : si les deux instances de PostgreSQL sont gérées par les paquets Ubuntu (comme il se doit), utilisez simplement l'option --cluster pour sélectionner l'instance de PostgreSQL à sauvegarder. , et il choisira automatiquement la version correspondante de pg_dump:

pg_dump --cluster 9.1/main [other pg_dump options]

ou

pg_dump --cluster 9.3/main [other pg_dump options].

mainest simplement une valeur par défaut. Exécutez pg_lsclusters pour voir vos noms actuels dans la colonne Clustername__.

Comment ça marche: tel qu'installé par les paquets Ubuntu, /usr/bin/pg_dump est en fait un lien symbolique vers /usr/share/postgresql-common/pg_wrapper, dont le but est précisément de sélectionner l'instance correcte et d'exécuter le binaire correspondant. --cluster n'existe pas dans les commandes PostgreSQL courantes, c'est un ajout Debian/Ubuntu destiné à résoudre ce problème de plusieurs versions/plusieurs chemins.

Il en va de même pour psqlname__, createdbname__, createusername__, etc. environ 18 commandes postgres dans /usr/bin sont en réalité gérées par pg_wrapper.

Voir man pg_wrapper pour plus d'informations.

9
Daniel Vérité

Vous pouvez utiliser:

Sudo find / -name pg_dump

trouver votre version de pg_dump dans mon cas: /usr/pgsql-9.6/bin/pg_dump

alors on peut faire ensuite:

Sudo ln -sfn /usr/pgsql-9.6/bin/pg_dump /usr/bin/pg_dump

afin de mettre à jour à celui dont nous avons besoin

2
edilio