Aller au contenu

Mise à jour mineure

Les versions mineures de PostgreSQL ne contiennent que des correctifs de bugs ou de failles de sécurité. Elles sont plus fréquentes que les versions majeures, avec un rythme de sortie de l’ordre des trois mois, sauf bugs majeurs ou failles de sécurité. Chaque bug est corrigé dans toutes les versions stables actuellement maintenues par le projet.

Il est donc possible d’appliquer ces mises à jour sans effectuer des tests de non-régression, et il n’est pas nécessaire non plus de procéder à un export/import des données. Il n’y a pas de régression de comportement entre versions mineures d’une même version majeure. Par ailleurs, les versions sont cumulatives. Il n’est pas nécessaire de passer les versions les unes sur les autres, il est tout à fait possible, par exemple, de passer directement d’une 16.2 à une 16.5.

Pour être prévenu en cas de sortie d’une nouvelle version mineure, il est possible de :

Le site suivant, basé sur les release notes, permet de visualiser simplement la différence entre plusieurs versions de PostgreSQL : Why Upgrade

La plupart des distributions fournissent leur propres paquets pour Postgres. Néanmoins, nous recommandons d’utiliser les paquets maintenus par la communauté (PostGres Developpement Group). Le PGDG maintient des paquets des versions stables pour les distributions courantes : PostgreSQL - Download.

Les paquets sont disponibles dès l’officialisation de la sortie d’une version, mineure ou majeure. Il est à noter que seules les distributions encore supportées bénéficient de ces mises à jours.

Numérotation des versions

  • Depuis la version 10 :
X version majeure
X.Y version mineure

Le premier bloc correspond à la version majeure, le 2ème bloc correspond à la version mineure.

Avant la version 10 :

X.Y : version majeure
X.Y.Z : version mineure

Les deux premiers digits correspondent à la version majeure, le 3ème digit correspond à la version mineure.

Prérequis

La communauté consacre beaucoup d’efforts à tester ces patchs afin de s’assurer qu’ils ne provoquent pas de modification du comportement normal du moteur de PostgreSQL.

Une mise à jour mineure ne nécessite donc pas de migration des données, mais requiert de suivre les étapes suivantes :

Lecture des Releases Notes

Avant d’appliquer toute mise à jour, il est indispensable de consulter les release notes de la version. Certaines mises à jour nécessitent d’effectuer des opérations de maintenance.

Attention

Si vous effectuez une mise à jour mineure cumulative de plusieurs versions mineures, il faut consulter les releases notes de chaque montée de version.

Mise en maintenance du mécanisme HA

Si votre cluster comprend des systèmes de bascule automatique, il faut bien penser à les mettre en mode maintenance afin d’éviter toute bascule inopinée lors de l’arrêt de l’instance primaire.

Il faut également prévoir de mettre en maintenance la supervision afin d’éviter toute levée d’alerte superflue.

Mise à jour des paquets

Une mise à jour mineure ne nécessite pas de migration de données. Il suffit d’arrêter l’instance, d’installer la nouvelle version avec le gestionnaire de paquets du système, et de redémarrer l’instance.

Note

Afin de s’assurer qu’un retour arrière est toujours possible, il est conseillé de conserver l’ancienne version des paquets dans un dépôt local. Il suffira de les réinstaller pour revenir à la version mineure précédente.

Dans cette section, nous allons aborder la mise à jour des paquets lorsque PostgreSQL a été installé via les dépôts communautaires.

Attention

Ce qui suit utilise la version 16. Voir dans la page suivante pour les autres versions.

Debian

Mise à jour de l’index de paquets

Sous Debian, il faut utiliser la commande apt update (en root) pour mettre à jour l’index des paquets.

apt update
Vérification de la présence de la nouvelle version

La commande suivante permet de vérifier la présence de nouvelles versions :

apt-cache policy postgresql-16
postgresql-16:
  Installed: 16.1-1.pgdg100+1
  Candidate: 16.2-1.pgdg100+1
  Version table:
     16.2-1.pgdg100+1 500
        500 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 Packages
        500 https://apt-archive.postgresql.org/pub/repos/apt buster-pgdg-archive/main amd64 Packages
 *** 16.1-1.pgdg100+1 500
        500 https://apt-archive.postgresql.org/pub/repos/apt buster-pgdg-archive/main amd64 Packages
        100 /var/lib/dpkg/status
Téléchargement des paquets

Afin de réduire l’indisponibilité, nous commençons par simplement télécharger les paquets :

apt install --download-only postgresql-16 postgresql-client-16 postgresql-client-common postgresql-common postgresql-doc-16
Arrêt de l’instance et installation des paquets

Lister les instances :

pg_lsclusters 
Ver Cluster  Port Status Owner    Data directory               Log file
16  main     5432 online postgres /var/lib/postgresql/16/main  /var/log/postgresql/postgresql-16-main.log

Arrêter l’instance :

systemctl stop postgresql@16-main.service

Mettre à jour les paquets :

apt install --only-upgrade postgresql-16 postgresql-client-16 postgresql-client-common postgresql-common postgresql-doc-16 postgresql-contrib-16

Attention

Sous Debian, l’instance est redémarrée automatiquement. Ce comportement peut être modifié dans le fichier start.conf présent dans le répertoire /etc/postgresql/<version>/main/.

Démarrage de l’instance

Si l’instance n’a pas été démarrée pendant la mise à jour :

systemctl start postgresql@16-main.service
Sauvegarde des anciens paquets

Note

Afin de s’assurer qu’un retour arrière est toujours possible, il est conseillé de conserver l’ancienne version des paquets dans un répertoire local. Il suffira de les réinstaller pour revenir à la version mineure précédente en cas de problème.

Les paquets sont stockés dans le répertoire /var/cache/apt/archives.

Il suffit de les copier dans un autre répertoire, par exemple /var/cache/apt/backup.

mkdir /var/cache/apt/backup
cp /var/cache/apt/archives/postgresql-*.deb /var/cache/apt/backup/

Noter que les anciennes versions des paquets sont aussi disponibles dans la morgue.

CentOS/RedHat/RockyLinux

Téléchargement des paquets

Afin de réduire l’indisponibilité, nous commençons par simplement télécharger les paquets :

Red Hat 8/RockyLinux

dnf update --downloadonly postgresql12-server postgresql12 postgresql12-contrib postgresql12-lib
CentOS/Red Hat 6 et 7
yum update --downloadonly postgresql16-server postgresql16 postgresql16-contrib postgresql16-libs

Sauvegarde des paquets

Note

Afin de s’assurer qu’un retour arrière est toujours possible, il est conseillé de conserver l’ancienne version des paquets dans un répertoire local. Il suffira de les réinstaller pour revenir à la version mineure précédente en cas de problème.

Les paquets sont stockés dans le répertoire /var/cache/yum/x86_64/.

Il suffit de les copier dans un autre répertoire, par exemple /var/cache/yum/backup/.

Note

Sur les nouvelles versions de RedHat, les paquets se trouvent dans /var/cache/dnf/x86_64/.

mkdir /var/cache/yum/backup/
cp /var/cache/yum/x86_64/6/pgdg12/packages/postgresql95-* /var/cache/yum/backup/

Warning

Pour que cette manipulation fonctionne, le cache des paquets doit être activé dans yum.

Pour le vérifier :

grep cache /etc/yum.conf
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1

Si keepcache est à 0, aucun paquet ne sera conservé dans les caches.

Arrêt de l’instance et installation des paquets

Pour CentOS 6 :

service postgresql-12 stop

Pour CentOS 7 :

systemctl stop postgresql-12

Mettre à jour les paquets :

yum update postgresql12-server postgresql12 postgresql12-contrib postgresql12-libs postgresql12-llvmjit

Warning

Sous CentOS, l’instance n’est pas redémarrée automatiquement.

Retour en arrière

Pour effectuer un retour en arrière vous pouvez suivre la procédure de Downgrade.