22.3. Migration entre les différentes versions

En règle générale, le format interne des données est modifié entre les différentes versions de PostgreSQL (quand le nombre après le premier point change). Ceci ne s'applique pas entre les différentes sorties mineures ayant le même numéro de version majeur (quand le nombre après le deuxième point change) ; elles ont toujours un format de stockage compatible. Par exemple, les versions 7.0.1, 7.1.2 et 7.2 ne sont pas compatibles, alors que les versions 7.1.1 et 7.1.2 le sont. Lorsque vous migrez entre des versions compatibles, vous pouvez simplement réutiliser les anciens fichiers de données avec les nouveaux exécutables. Sinon, vous devez << sauvegarder >> et << restaurer >> vos données sur le nouveau serveur avec pg_dump (Des vérifications sont faites pour vous éviter de faire des mauvaises manipulations, si bien que rien de dangereux ne peut arriver si vous vous trompez.). La procédure d'installation précise n'est pas le sujet de cette section. Les détails se trouvent dans le Chapitre 14.

Vous minimiserez la durée d'indisponibilité en installant le nouveau serveur dans un répertoire différent et en lançant l'ancien et le nouveau serveur en parallèle sur des ports différents, puis en utilisant des commandes comme

pg_dumpall -p 5432 | psql -d template1 -p 6543

pour transférer les données. Ou utilisez un fichier intermédiaire si vous voulez. Vous pouvez alors éteindre le nouveau serveur et démarrer le nouveau sur le port que l'ancien utilisait. Vous devez vous assurer que la base de données n'est pas modifiée après que vous ayez lancé pg_dumpall, sans quoi ces modifications seraient évidemment perdues. Référez vous au Chapitre 19 pour savoir comment interdire l'accès. En pratique, vous voudrez certainement tester votre application sur le nouveau serveur avant de basculer définitivement.

Si vous ne pouvez pas ou ne voulez pas lancer les deux serveurs en parallèle, vous pouvez faire l'étape de sauvegarde avant d'installer la nouvelle version, éteindre le serveur, déplacer l'ancienne version à un autre endroit, installer la nouvelle, la démarrer et enfin restaurer les données. Par exemple :

pg_dumpall > sauvegarde.sql
pg_ctl stop
mv /usr/local/pgsql /usr/local/pgsql.old
cd ~/postgresql-7.4.29
gmake install
initdb -D /usr/local/pgsql/data
postmaster -D /usr/local/pgsql/data
psql template1 < sauvegarde.sql

Vous trouverez les méthodes pour arrêter et démarrer les serveurs, ainsi que d'autres détails dans le Chapitre 16. Les instructions d'installation vous donneront des conseils sur les endroits stratégiques pour réaliser ces opérations.

Note : Quand vous << déplacez l'ancienne version à un autre endroit >>, l'ancienne installation n'est plus tout à fait utilisable. Certaines parties de l'installation contiennent des informations sur l'endroit où d'autres parties sont installées. Ce n'est généralement pas un gros problème, mais si vous prévoyez d'utiliser deux installations en parallèle pendant un certain temps, vous devriez leur donner des répertoires d'installation différents lors de la compilation.