Comment exécuter une version spécifique (8.4, 9.1) de la commande postgresql pg_ * (par exemple, pg_dump)

11

J'ai installé les versions 8.4 et 9.1 de Postgresql. Pour une commande Postgresql donnée, comment spécifier une version spécifique de la commande à exécuter? (par exemple, psql, pg_dump, pg_ctlcluster, pg_restore, ...)

Ma question est motivée par vouloir faire un pg_dump en préparation d'une mise à jour de 8.4 à 9.1, et je veux savoir quelle version de pg_dump j'utilise.

Je cours sur Ubuntu 10.04 Natty.

Rob Bednark
la source

Réponses:

15

Vous êtes sur Ubuntu et vous avez évidemment Martin Pitt pg_wrapperinstallé (à en juger par pg_ctlcluster) qui est fourni par le paquet postgresql-commonet est livré avec les paquets Debian standard. J'utilise la même chose sur Debian .

Sur un système Linux, exécutez whichdans le shell pour voir quel exécutable est réellement choisi:

postgres@db:~$ which pg_dump
/usr/bin/pg_dump
postgres@db:~$ ls -l /usr/bin/pg_dump
lrwxrwxrwx 1 root root 37  4. Jun 18:57 /usr/bin/pg_dump -> ../share/postgresql-common/pg_wrapper

pg_dumpest en fait un lien symbolique vers pg_wrapper, qui sélectionne dynamiquement la version appropriée du programme client pour le cluster db pg_dumpavec lequel vous exécutez . Je cite la page de manuel de pg_wrapper:

Ce programme est exécuté uniquement en tant que lien vers des noms qui correspondent aux programmes PostgreSQL dans / usr / lib / postgresql / version / bin. Il détermine le cluster et la base de données configurés pour l'utilisateur et appelle la version appropriée du programme souhaité pour se connecter à ce cluster et à cette base de données, en fournissant les options spécifiées à cette commande.

   The target cluster is selected by the following means, in descending order of precedence:
   1.  explicit specification with the --cluster option
   2.  explicit specification with the PGCLUSTER environment variable
   3.  matching entry in ~/.postgresqlrc (see postgresqlrc(5)), if that file exists
   4.  matching entry in /etc/postgresql-common/user_clusters (see user_clusters(5)), if that file exists
   5.  If only one local cluster exists, that one will be selected.
   6.  If several local clusters exist, the one listening on the default port 5432 will be selected.

   If none of these rules match, pg_wrapper aborts with an error.

IOW, la bonne version devrait être choisie de manière automatique - à moins que vous n'ayez foiré votre installation d'une manière ou d'une autre. Vous pouvez toujours ajouter l'option --clusterpour être spécifique.

Erwin Brandstetter
la source
1
Juste une note: cela n'aide pas avec les connexions à distance. J'ai installé les outils client 8.3 et 9.1 et il est par défaut 8.3 pour une raison quelconque. Je dois sélectionner manuellement le chemin dans / usr / lib pour utiliser la bonne version. J'aurais pensé que le plus récent serait utilisé par défaut, mais ne semble pas.
Sami Kuhmonen
Vous n'avez pas besoin de la plus récente, mais de celle correspondant à votre base de données. À certaines fins, la nouvelle version de pg_dump peut être la meilleure option, cependant.
Erwin Brandstetter
Pouvez-vous préciser ce qui doit exactement se trouver dans le fichier ~ / .postgreslqrc? Ma sortie client -> psql (8.4.21, serveur 9.1.13) AVERTISSEMENT: psql version 8.4, serveur version 9.1. Certaines fonctionnalités psql peuvent ne pas fonctionner.
Croydon Dias
Cela ne semble pas fonctionner pour moi. J'ai créé un vidage sur un serveur avec 9.1, et quand j'ai essayé de restaurer sur un autre serveur avec 9.1 et 8.4, il me dit qu'il ne peut pas reconnaître le format de fichier. De plus, il n'y a pas d' --clusteroption de ligne de commande.
Alexis Wilke
4

j'utilise

PGCLUSTER=8.4/main pg_dump ...
PGCLUSTER=9.1/main pg_dump ...
Gavriel
la source