Blog

Blog

Les surprises de pg_upgradecluster

J'aime beaucoup les wrappers perl qu'on trouve dans les distributions Debian pour gérer postgreSQL. Il n'empêche que j'ai rencontré un comportement bizarre l'autre jour chez un client.
Nous voulions utiliser l'option --link (ou -k) de pg_upgrade pour faire un upgrade plus rapide de notre base de données.
Pour tous les autres wrappers, il suffit de fournir l'option de l'outil postgreSQL au wrapper et le tour est joué. C'est ce que nous avons fait mais, là, les temps étaient très très longs.

Après avoir regardé la doc et le code, nous avons découvert que pg_upgradecluster utilise par défaut pg_dump pour faire un upgrade. Notre option -k n'était donc pas prise en compte...

Manquant de temps, nous avons donc fait l'upgrade à la main (création du nouveau cluster, arrêt des deux instances, lancement de pg_upgrade avec l'option -k).

Depuis, j'ai pu regarder pg_upgradecluster et j'ai pu confirmer que la ligne suivante fonctionne.
pg_upgradecluster -v 9.6 9.5 main -m upgrade -k 
Voici la procédure sous Debian pour faire un upgrade (on peut utiliser l'option -m dump pour faire des sauts de version majeure).
  1. Installation de la nouvelle version
  2. sudo apt-get install postgresql-9.6
  3. Suppression du cluster main
  4. sudo pg_dropcluster 9.6 main
  5. Lancement de l'upgrade
  6. sudo pg_upgradecluste -v 9.6 9.5 main -m upgrade
Pour en savoir plus :
La documentation de pg_upgrade est .
Le code source de pg_upgradecluster est ici (et n'hésitez pas à regarder la man page).