Activer les checksums sur un cluster PostgreSQL existant

PostgreSQL permet de détecter la corruption des données grâce aux checksums. Par défaut, les checksums ne sont pas activés lors de la création d’un nouveau cluster. Nous allons voir comment les activer après sa création.

Les checksums sont indispensables pour détecter si les données stockées sur l’espace de stockage ne sont pas corrompues. En cas de corruption des données, il est toujours préférable d’être au courant plutôt que de servir des données corrompues, qui ne correspondent plus à ce qui avait été sauvegardé en base.

Les checksums ne permettent pas de réparer les données.

L’activation des checksums sur un cluster existant est possible depuis PostgreSQL version 12. Si votre cluster est plus ancien, vous devez le mettre à jour, puis activer les checksums.

Activation des checksums

Le cluster doit être arrêté afin d’activer les checksums:

$ sudo pg_ctlcluster 14 main stop

Une fois le cluster éteint, il est possible d’activer les checksums:

$ sudo -u postgres /usr/lib/postgresql/14/bin/pg_checksums \
  --enable --progress --verbose \
  --pgdata=/var/lib/postgresql/14/main

La documentation de l’outil pg_checksums est très bien faite. N’hésitez pas à la consulter.

Démarrer un cluster corrompu

Une fois que les checksums sont activés, PostgreSQL ira vérifier à chaque lecture que les données stockées ne sont pas corrompues. S’il détecte une corruption, il retournera une erreur.

Si vos données sont corrompues mais que vous souhaitez quand même démarrer votre cluster, vous pouvez définir la variable de configuration ignore_checksum_failure. Attention: vous n’avez aucune garantie que les données que vous lirez soient cohérentes. Il est possible que PostgreSQL crash lors de l’accès aux données.

N’oubliez pas vos backups

Afin de prévenir une corruption des données, n’oubliez pas de faire des sauvegardes de votre cluster PostgreSQL. Ayez en tête que si vous arrivez à dumper l’intégralité de votre cluster avec pg_dump, vous avez la garantie que la totalité de vos données sont lisibles.

Les backups binaires, tels qu’effectués avec la streaming replication, ne permettent pas d’assurer que toutes les données soient lisibles. S’il y a une corruption binaire, il est possible qu’elle soit répliquée sur votre serveur standby.