3 Upgrade des versions majeures de PostgreSQL
Darks edited this page 3 months ago

Deux méthodes : manuelle (pg_dumpall), ou automatique (pg_upgrade).

Le cluster est dans /var/lib/postgres/data.

Méthode manuelle

Commencer par arrêter les serveurs et dump toute la base.

TODO : @Breizh préfère faire pointer le docroot de la v5 vers un dossier de maintenance qu'arrêter le vhost.

# Arrêter la v5
% sudo rm /etc/nginx/sites-enabled/pc-dev.conf
% sudo systemctl reload nginx

# Dump toute la base
% cd /var/lib
% sudo -u postgres pg_dumpall | sudo tee postgres12to13-dump > /dev/null

# Arrêter le serveur PostgreSQL
% sudo systemctl stop postgresql

# Déplacer le répertoire de données (toujours depuis /var/lib)
% sudo mv postgres postgres.12

Mettre à jour les paquets pour installer la nouvelle version de PostgreSQL.

% yay -Syu # Vérifer que extra/postgresql et extra/postgresql-libs sont mis à jour

Recréer le cluster à l'ancienne adresse et migrer la configuration. Avec un peu de chance les valeurs par défaut n'auront pas changé.

# Toujours depuis /var/lib
% sudo -u postgres initdb -D postgres/data

# Vérifier les changements sur la conf ; si besoin, fusionner
% sudo diff postgres.12/data/pg_hba.conf postgres/data/pg_hba.conf
% sudo diff postgres.12/data/postgresql.conf postgres/data/postgresql.conf

Démarrer le nouveau cluster et réimporter toutes les données.

# Créer le dossier pour le verrou s'il n'existe pas
% sudo mkdir /run/postgresql && sudo chown postgres:postgres /run/postgresql

# Démarrer le cluster
% sudo systemctl start postgresql

# Réimporter les données
% sudo -u postgres psql -d postgres -f postgres12to13-dump

Redémarrer la v5.

% sudo ln -s /etc/nginx/sites-{available,enabled}/pc-dev.conf
% sudo systemctl reload nginx

Si après trois jours ça marche toujours, supprimer l'ancienne version.

% sudo rm -rf postgres.12
% sudo rm -f postgres12to13-dump

Méthode automatique

Sur Arch uniquement. Voir la doc pour d'autres distros. Pour passer de X à Y

% sudo pacman -Syu postgresql-old-upgrade # installation des outils qui vont bien
% sudo mv /var/lib/postgres/data /var/lib/postgres/data.old # copie de l'ancienne BDD
% sudo mkdir /var/lib/postgres/data /var/lib/postgres/tmp # création des nouveaux répertoires
% sudo chown postgres:postgres /var/lib/postgres/data /var/lib/postgres/tmp
[postgres]$ cd /var/lib/postgres/tmp
[postgres]$ initdb -D /var/lib/postgres/data # initialisation de la nouvelle BDD en version Y
[postgres]$ pg_upgrade -b /opt/pgsql-X/bin -B /usr/bin -d /var/lib/postgres/olddata -D /var/lib/postgres/data # passage du format de X à Y