Migration postgresql
Dans la suite je prendrai comme exemple la migration de données depuis postegresql 10 vers postgresql 12.
Sauvegardes
Dans un premier temps, quand on effectue ce genre de manipulation, il ne faut pas oublier de faire des sauvegardes
sudo su postgres pg_dumpall > backup.sql
Migration
Installation
sudo apt-get update sudo apt-get install postgresql-12 postgresql-server-dev-12
En faisant ça, le nouveau serveur postgresql 12 écoutera sur le port 5433, ça sera important dans la suite.
Arrêt du serveur
Avant de manipuler les données il faut stopper le serveur de base de données
sudo systemctl stop postgresql.service
Sur certains systèmes il faudra plutôt lancer la commande suivante :
sudo /etc/init.d/postgresql stop
Migration des données
sudo -u postgres /usr/lib/postgresql/12/bin/pg_upgrade \ --old-datadir=/var/lib/postgresql/10/main \ --new-datadir=/var/lib/postgresql/12/main \ --old-bindir=/usr/lib/postgresql/10/bin \ --new-bindir=/usr/lib/postgresql/12/bin \ --old-options '-c config_file=/etc/postgresql/10/main/postgresql.conf' \ --new-options '-c config_file=/etc/postgresql/12/main/postgresql.conf'
Cette commande va créer deux scripts qui permettront de vérifier la cohérence des nouvelles données et de supprimer les anciennes.
Modification des ports d'écoute
Il faut intervertir les ports puisque l'ancienne version utilise le port 5432, alors que la nouvelle le 5433. Il faut donc modifier le fichier :
/etc/postgresql/12/main/postgresql.conf
Pour modifier le port d'écoute par 5432. Ainsi que le fichier
/etc/postgresql/10/main/postgresql.conf
Pour modifier le port d'écoute par 5433.
Vérification
Avec l'utilisateur postgres on peut vérifier si c'est bien la nouvelle base de donnée qui est utilisée :
sudo systemctl start postgresql.service psql -c "SELECT version();"
ou :
sudo /etc/init.d/postgresql start psql -c "SELECT version();"
Finalisation
Cette étape se fait avec les deux scripts qui ont été générés
./analyze_new_cluster.sh
Si votre service est utilisable après cette étape vous pouvez alors supprimer l'ancienne base de données :
sudo apt-get remove postgresql-10 postgresql-server-dev-10 ./delete_old_cluster.sh