Migra­tion d’une version majeure de Post­greSQL à une autre

NB : instructions pour le passage de PostgreSQL 9.6 à PostgreSQL 11 (Debian Buster). Voir ici pour de 9.1 à 9.4 (Debian Jessie) et ici pour de 9.4 à 9.6 (Debian Stretch).

NB : mettez vous dans un tmux avant de commencer la procédure. Prudence est mère de sûreté.

On stoppe les clusters PostgreSQL

service postgresql stop

On vire le cluster de la nouvelle version (normalement vide si on vient juste de l'installer : faire gaffe à ne pas laisser passer de temps entre l'installation de la nouvelle version et la migration des données, pour que personne n'utilise le nouveau cluster)

pg_dropcluster --stop 11 main

On migre les données

pg_upgradecluster -m upgrade 9.6 main

Il faut savoir que cette commande copie les données de l’ancien cluster vers le nouveau. Il vous faut donc avoir au moins une fois la place de /var/lib/postgresql/9.6 de disponible. Un contournement est d’utiliser l’option --link qui utilisera des hard links plutôt qu’une copie. Par contre, si quelque chose foire, vous foirez votre ancien cluster avec, c’est donc dangereux.

Ou alors, pour éviter la réindexation (voir plus bas) :

pg_upgradecluster -m dump 9.6 main
Sur Buster, il est nécessaire de réindexer les bases. On a d’ailleurs ce message à l’installation de PostgreSQL 11 :

  Existing PostgreSQL databases need to be reindexed

  When upgrading from stretch to buster, the glibc locale data is upgraded.
  Specifically, this changes how PostgreSQL sorts data in text indexes. To
  avoid corruption, such indexes need to be REINDEXed immediately after
  upgrading the locales or locales-all packages, before putting back the
  database into production.

  Suggested command: sudo -u postgres reindexdb --all

  Alternatively, upgrade the databases to PostgreSQL 11 using
  pg_upgradecluster. (This uses pg_dump by default which will rebuild all
  indexes. Using -m upgrade or pg_upgrade is not safe because it preserves
  the now-wrong index ordering.)

  Refer to the PostgreSQL Wiki for more information:
    https://wiki.postgresql.org/wiki/Locale_data_changes
    

Donc on réindexe les bases :

sudo -u postgres reindexdb --all

On teste les applis qui utilisent PostgreSQL.

Si ça fonctionne, on vire les anciennes données

pg_dropcluster 9.6 main --stop

On vire l'ancienne version de PostgreSQL

apt-get autoremove --purge postgresql-9.6 

Enfin, si vous avez utilisé l’option -m upgrade, allez dans /var/log/postgresql, vous aurez un dossier qui commence par pg_upgrade et qui contiendra deux scripts. Un pour réanalyser votre nouveau cluster, un autre pour supprimer l’ancien. Comme vous avez normalement déjà supprimé l’ancien avec apt-get, vous n’avez plus qu’à lancer le script de réanalyse :

/var/log/postgresql/pg_upgradecluster-9.6-11-main.6bmx/analyze_new_cluster.sh

Source

  • admin/bdd/pgsql/migration-version-majeure.txt
  • Dernière modification: 2019/07/07 10:40
  • par luc