
Dans ce tutoriel, nous allons voir comment migrer PostgreSQL vers une version supérieure lorsqu’il est exécuté dans un conteneur Docker.
Que ce soit pour bénéficier des nouvelles fonctionnalités, améliorer les performances ou maintenir un environnement à jour, la mise à niveau d’une base PostgreSQL nécessite quelques précautions.
Nous verrons les différentes étapes pour effectuer la migration en toute sécurité, sauvegarder vos données, déployer la nouvelle version et valider son bon fonctionnement.
Sommaire
Cas d’usage
Pour illustrer cette migration, je vais partir d’un cas concret, suite à une mise à jour de OpenProject de la version 13 à la version 16, il est nécessaire également de mettre à jour PostgreSQL qui est en version 13, comme on peut le voir sur la capture ci-dessous :

PostgreSQL ne supporte pas la montée de version directement en modifiant la version (tag) du conteneur, il faut donc passer par une sauvegarde et ensuite importer la sauvegarde dans le nouveau conteneur.
Précaution
Avant de commencer à faire la mise à jour, faire une sauvegarde de l’ordinateur et dans le cas d’une machine virtuelle, faire un snapshot, le retour arrière sera plus rapide.
Sauvegarder la base de données
Voici la déclaration du service dans mon fichier docker-compose.yml :

Comme on peut le voir, le nom du mon service est db et mon serveur PostgreSQL est en version 13, on peut également voir que je fais redirection du dossier data de PostgreSQL dans un répertoire local sur mon serveur hôte Docker.
Pour faire le sauvegarde entrée la commande suivante :
sudo docker compose exec -t db pg_dump -U postgres -F c -b -v -f /var/lib/postgresql/data/file-backup.pgsql <DATABASE>Patienter pendant la sauvegarde :

Dans le dossier (volume) vérifier que le fichier de sauvegarde est présent :

Mise à jour et restauration de la base de données
Editer le fichier docker-compose.yml et modifier le service PostgreSQL en modifiant le tag de l’image et en modifiant le volume.

Arrêter les conteneurs :
sudo docker compose down -vTélécharger la nouvelle image de PostgreSQL :
sudo docker compose pullDémarrer le conteneur PostgreSQL qui sera sur la version cible de mise à jour
sudo docker compose up -d <SERVER-NAME>
Vérifier que le nouveau volume (dossier) est créé :

Copier dans le nouveau volume (dossier) le fichier de sauvegarde à l’aide de la cp.
Se connecter en au conteneur PostgreSQL en bash
sudo docker compose exec <SERVER-NAME> bashAller dans le dossier /var/lib/postgresql/data/ du conteneur et vérifier que le fichier de sauvegarde est présent.

Restaurer la base de données :
pg_restore -U postgres -d <DATABASE> <FILE-NAME>La restauration effectuée, arrêter le conteneur.
sudo docker compose downPuis démarrer l’ensemble des services :
sudo docker compose up -dPour continuer, vérifier le bon fonctionnement de l’application et la prise en compte de la mise à jour.

Nettoyage
Pour finir la migration, une fois que vous avez valider le bon fonctionnement, nettoyer le serveur.
Supprimer les volumes, conteneur et dossier de l’ancienne version de PostgreSQL.
Supprimer le snapshot dans le cas d’un ordinateur virtuel.
Conclusion
La migration de PostgreSQL vers une version supérieure dans un conteneur Docker est une opération simple à condition de bien préparer chaque étape.
En réalisant une sauvegarde complète avant toute manipulation et en testant la nouvelle version avant la mise en production, vous limitez les risques et garantissez la continuité de service.
Grâce à Docker, la mise à jour devient plus souple et rapide, tout en conservant un environnement maîtrisé et reproductible.
