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).
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]
.
main
est simplement une valeur par défaut. Exécutez pg_lsclusters
pour voir vos noms actuels dans la colonne Cluster
name__.
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 psql
name__, createdb
name__, createuser
name__, 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.
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