Pérégrinations informatiques » Mise à jour rapide d’une version majeure de postgresql

Mise à jour rapide d’une version majeure de postgresql

Dans ce cas précis, la problématique se présentant étant de mettre à jour une base de données contenant près d’un gigaoctet d’objets géographiqes (postgis) sur une petite machine Atom tournant sous Debian Wheezy depuis PostgreSQL 9.2 vers PostgreSQL 9.4 … le principal écueil auquel j’ai précédemment été confronté lors de la migration 8.4 vers 9.2 étant que le dump/restore avait duré pratiquement une journée entière (surtout la phase de restauration, d’ailleurs qui avait poussé la machine dans ses derniers retranchements en termes de temps de calcul).
C’est bien pourquoi, cette fois-ci j’envisageai l’utilisation de pg_upgrade (non sans avoir toutefois généré un dump complet de ma BDD) !

Cet utilitaire doit être lancé par l’utilisateur postgres, toutes instances arrêtées, et doit pouvoir écrire des journaux de logs : il faut donc se positionner dans un répertoire où il aura les droits en écriture.

/etc/init.d/postgresql stop
cd /var/lib/postgresql

Une première exécution de la commande pg_upgrade

su postgres -c "/usr/lib/postgresql/9.4/bin/pg_upgrade --check --old-datadir=/var/lib/postgresql/9.2/main/ --new-datadir=/var/lib/postgresql/9.4/main/ --old-bindir=/usr/lib/postgresql/9.2/bin/ --new-bindir=/usr/lib/postgresql/9.4/bin/ -o ' -c config_file=/etc/postgresql/9.2/main/postgresql.conf' -O ' -c config_file=/etc/postgresql/9.4/main/postgresql.conf'"
2068 su postgres -c "/usr/lib/postgresql/9.4/bin/pg_upgrade --old-datadir=/var/lib/postgresql/9.2/main/ --new-datadir=/var/lib/postgresql/9.4/main/ --old-bindir=/usr/lib/postgresql/9.2/bin/ --new-bindir=/usr/lib/postgresql/9.4/bin/ -o ' -c config_file=/etc/postgresql/9.2/main/postgresql.conf' -O ' -c config_file=/etc/postgresql/9.4/main/postgresql.conf'"

échoue indiquant qu’il manque la librairie dynamique postgis-2.0 !

En effet, depuis la version 9.3, le dépôt pg_apt fournit l’extension Postgis en version 2.1 ; un simple lien symbolique permettra de tromper pg_upgrade, et pourra être en fin de procédure supprimé sans toutefois porter atteinte au bon fonctionnement de la BDD dans la mesure où l’extension est maintenant installée via un CREATE EXTENSION …

Donc

cd /usr/lib/postgresql/9.4/lib/ && ln -s postgis-2.1.so postgis-2.0.so

suivi d’une nouvelle exécution de la commande pg_upgrade précédente.
Et le quasi-miracle survient : au bout de quelques 5 minutes l’opération se termine avec juste un avertissement indiquant que les statistiques n’ont pas été mise à jour durant le processus, et qu’il faudra y procéder manuellement.

Au final, après relancement du daemon 9.4, la commande :

/usr/lib/postgresql/9.4/bin/vacuumdb -h localhost -U postgres -p 5434 --all --analyze-only

est lancée et dure quelques minutes supplémentaires afin de recueillir les données statistiques nécessaires au bon fonctionnement du planificateur.

Conclusion, une journée pour le précédent passage 8.4 vers 9.2, et une petite demi-heure pour la migration 9.2 vers 9.4 : chapeau bas pour les développeurs PostgreSQL !

posté le 23. décembre 2014 à 7:03 par info · Permalink
Catégories : Administration système, postgresql

Ajoutez un commentaire