J'ai installé deux serveurs PostgreSQL sur mon ordinateur. L'un est 9,1 et l'autre est 9,3. J'ai besoin que les deux serveurs soient installés.
Cependant, lorsque j'exécute pg_dump, j'obtiens une erreur de non-concordance de version:
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 installé le 9.1 en premier et le 9.3 plusieurs mois plus tard - j'ai besoin que les deux serveurs de base de données soient installés).
postgresql
Luis Masuelli
la source
la source
pg_dump
. Les deux sont installés, mais un seul est la valeur par défaut. Voirupdate-alternatives
pour les chemins, oudpkg -L
le package client postgresql pour voir où ils se trouvent. N'ayez pas immédiatement accès à une boîte Ubuntu pour vous montrer moi-même.PATH
variable d'environnement avec laquelle l'application s'exécute.Réponses:
TL; DR : si les deux instances PostgreSQL sont gérées par les packages Ubuntu (comme il se doit), utilisez simplement l'
--cluster
option pour sélectionner l'instance 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 juste une valeur par défaut, exécutezpg_lsclusters
pour voir vos noms réels dans laCluster
colonne.Comment cela fonctionne: tel qu'installé par les packages Ubuntu,
/usr/bin/pg_dump
est en fait un lien logiciel 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, c'est un ajout Debian / Ubuntu qui est destiné à résoudre ce problème de versions / chemins multiples.C'est la même pour
psql
,createdb
,createuser
, etc. environ 18 commandes de Postgres en/usr/bin
sont effectivement gérés parpg_wrapper
.Voir man pg_wrapper pour plus.
la source
version
= version principale de postgresql etmain
= nom par défaut du cluster. Voir les pages de manuel de pg_lsclusters et pg_wrapper.Vous pouvez utiliser:
pour trouver vos versions de
pg_dump
dans mon cas:/usr/pgsql-9.6/bin/pg_dump
nous pouvons ensuite faire:
afin de mettre à jour celui dont nous avons besoin
la source