Mise à niveau majeure avec pg_upgrade --link (runbook de bout en bout)
PostgreSQLMise à niveauCommande
# As the postgres user, in a writable directory; example 16 -> 17
export OLD_BIN=/usr/pgsql-16/bin NEW_BIN=/usr/pgsql-17/bin
export OLD_DATA=/var/lib/pgsql/16/data NEW_DATA=/var/lib/pgsql/17/data
# 0) initdb the new cluster with the same encoding/locale and checksum setting as the old one (-k if the old cluster has checksums)
# 1) Compatibility check (can run while the old cluster is up, changes no data):
$NEW_BIN/pg_upgrade --old-bindir=$OLD_BIN --new-bindir=$NEW_BIN --old-datadir=$OLD_DATA --new-datadir=$NEW_DATA --check
# 2) Stop the old cluster and upgrade with hard links:
$OLD_BIN/pg_ctl -D $OLD_DATA stop -m fast
$NEW_BIN/pg_upgrade --old-bindir=$OLD_BIN --new-bindir=$NEW_BIN --old-datadir=$OLD_DATA --new-datadir=$NEW_DATA --link --jobs=4
# 3) Carry postgresql.conf/pg_hba.conf customizations over to the new cluster, start it:
$NEW_BIN/pg_ctl -D $NEW_DATA -l /tmp/pg17_start.log start
# 4) Gather statistics, run generated scripts if any:
$NEW_BIN/vacuumdb --all --analyze-in-stages
# psql -X -f update_extensions.sql (if pg_upgrade generated it)
# 5) After validation and a fresh backup, delete the old cluster:
./delete_old_cluster.shCe que fait la commande
Valide d'abord la compatibilité avec --check, puis effectue la mise à niveau majeure en quelques minutes quelle que soit la taille des données, en créant des liens physiques (hard links) vers les fichiers de données de l'ancien cluster au lieu de les copier ; ensuite collecte les statistiques par étapes et supprime l'ancien cluster.
Quand l'utiliser
Pour passer sur place un gros cluster à une nouvelle version majeure avec une interruption courte acceptable (quelques minutes).
Attention
Avec --link, une fois le nouveau cluster démarré, l'ancien ne peut plus être utilisé sans risque ; le seul retour arrière possible est une sauvegarde faite avant la mise à niveau. Les répertoires de données ancien et nouveau doivent être sur le même système de fichiers. Les plans peuvent être médiocres sur le nouveau cluster tant qu'analyze n'est pas terminé. Si vous utilisez pgBackRest, exécutez stanza-upgrade et faites immédiatement une nouvelle sauvegarde full ; les sauvegardes de l'ancienne version ne peuvent pas être restaurées dans le nouveau cluster.