Migration postgresql

De wiki jackbot
Aller à la navigation Aller à la recherche


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

Source

https://stackoverflow.com/questions/60409585/how-to-upgrade-postgresql-database-from-10-to-12-without-losing-data-for-openpro