pg_dump non-concordance de version sur Debian

8

J'exécute PostgreSQL sur Debian Unstable / Sid. J'ai les versions actuelles (9.1) de postgresql, postgresql-client, postgresql-client-common(143) installé.

Le problème que j'essaie est de courir pg_dump. Je reçois cette erreur:

pg_dump: server version: 9.1.9; pg_dump version: 9.0.6
pg_dump: aborting because of server version mismatch

Je n'arrive pas à comprendre comment obtenir une version plus récente de pg_dump. Il semble provenir du postgresql-client-commonpackage, et j'ai essayé de l'exécuter apt-get --reinstall, mais cela ne m'a pas permis d'obtenir une version plus récente de pg_dump.

Comment contourner cela? Ou où puis-je trouver un package avec une version plus récente de pg_dump?

supercheetah
la source
Vous vous rendez compte que cela fait partie du cours puisque vous utilisez Debian Sid? C'est instable. Qu'est-ce que ça which pg_dumpvous montre? Juste pour confirmer qu'il s'agit bien de la version packagée et non d'une autre.
slm
Ouais, j'ai vérifié ça. Ça se voit /usr/bin/pg_dumpet dpkg -S /usr/bin/pg_dumpça me donne postgresql-client-common: /usr/bin/pg_dump.
supercheetah
Consultez ma réponse, voyez si cela aide.
slm

Réponses:

3

Quelques options.

Téléchargez .deb 9.1 depuis le site Postgres

Jetez un œil à cette page intitulée: Téléchargements Linux (Debian) - PostgreSQL . Vous pouvez soit télécharger un .deb mis à jour depuis le site directement, soit rediriger vers leur référentiel et exécuter une commande comme celle-ci:

apt-get install postgresql-9.1

Backports Debian

Vous pourrez peut-être trouver des versions spécifiques ici, http://backports.debian.org/ .

Utilisez une version générique

Vous pouvez télécharger une version binaire de PostgreSQL et l'installer dans votre répertoire personnel ou /optpar exemple.

Téléchargez l'une des pré-versions pour une utilisation en entreprise

Je n'ai pas beaucoup d'expérience avec ceux-ci, mais vous pourrez peut-être télécharger l'un d'eux similaire à une version générique et utiliser le client à partir de son installation, tel quel, videz votre base de données.

Forfaits de distribution croisée

Vous pouvez télécharger des packages qui ont été construits de manière à ce qu'ils soient indépendants de la distribution. Je viens de télécharger la version 9.1.9 et elle inclut l' pg_dumpoutil.

Le logiciel est fourni au format .rpm ou .deb et s'installe dans /opt/postgres/9.1. Plus précisément l' pg_dumpoutil est fourni ici: /opt/postgres/9.1/bin/pg_dump.

slm
la source
La version de PostgreSQL n'est pas vraiment le problème. C'est la version pg_dumpqui est ancienne et incompatible. Y a-t-il un endroit où je peux trouver cela spécifiquement?
supercheetah
Je pense qu'il est intégré à ces packages. Je voudrais simplement télécharger l'une des pré-versions pour la version spécifique et utiliser la pg_dumpcommande à partir de là. Ils ne devraient pas avoir à être installés, simplement non extraits dans un répertoire. Vous devrez peut-être définir une variable d'environnement pour pointer vers un répertoire de bibliothèque, mais cela devrait être assez simple.
slm
4

Une autre option, qui peut vous convenir, consiste à désinstaller l'ancienne version parallèle:

sur debian / ubuntu:

sudo apt-get remove postgresql-8.4
sudo apt-get remove postgresql-client-8.4

Cela préserve la dernière version (par exemple, 9.1) en supprimant uniquement les anciennes bibliothèques client et serveur 8.4.

David Thomas
la source
4

Dans mon cas, j'avais deux ensembles de bases de données, certains fonctionnant sur l'ancienne version de Postgresql 8.4 et d'autres fonctionnant sur la version 9.1. Ce que j'ai fait était de localiser pg_dumpsur une machine Linux en utilisant la locatecommande ci-dessous

$ locate pg_dump

/usr/bin/pg_dump
/usr/bin/pg_dumpall
/usr/lib/postgresql/8.4/bin/pg_dump
/usr/lib/postgresql/8.4/bin/pg_dumpall
/usr/lib/postgresql/9.1/bin/pg_dump
/usr/lib/postgresql/9.1/bin/pg_dumpall

Étant donné que la valeur par défaut /usr/bin/pg_dumpest pour Postgresql version 8.4, je viens de spécifier à /usr/lib/postgresql/9.1/bin/pg_dumppartir de la ligne de commande lors du dumping à partir de bases de données 9.1 qui s'exécute sur un port différent et cela a fonctionné.

$ /usr/lib/postgresql/9.1/bin/pg_dump -p 5434
Erick
la source
2

En plus des réponses ci-dessus, vous pouvez également indiquer pg_dumpet d'autres commandes, quelle version utiliser via l' clusteroption. Par exemple,

$pg_dump --cluster 9.1/main

visera la version 9.1.

Notez que cela utilise pg_wrapper, qui est fourni avec Ubuntu (Debian) postgresql-commonet fonctionne avec lui . Notez également que le cluster ( dans l'exemple) peut être différent dans votre paramètre.main

Plus d'informations sur pg_wrapperpeuvent être trouvées dans cette réponse DBA .

Dennis
la source
0

J'ai rencontré le même problème aujourd'hui et la réponse d'Erick semble être la plus précise. Le problème est probable que vous avez différentes versions de postgresql-client et pg_dump utilise simplement le client le plus ancien.

Vous pouvez résoudre ce problème en utilisant le chemin complet comme il l'a décrit, mais j'ai trouvé une solution plus simple pour supprimer le package postgresql-client-common (qui supprime tous les clients), puis réinstaller postgresql-client-9.3. Cela ne vous laisse que les dernières versions de pg_dump, ce que vous voulez probablement.

skylar
la source