LOXODATA

Mise à jour PostgreSQL 14.4

2022-06-16   342 mots, 2 minutes de lecture

2022-06-16 Correctif

Le PostgreSQL Global Development Group publiera une mise à jour de PostgreSQL 14 le 16 juin 2022.

Cette mise à jour corrige une erreur présente dans toutes les versions de PostgreSQL 14 pouvant causer des corruptions silencieuses d’index. Depuis la sortie de PostgreSQL 14, les commandes CREATE INDEX CONCURRENTLY et REINDEX CONCURRENTLY pouvaient conduire à une corruption d’index. Ce problème est corrigé avec la prochaine version mineure, PostgreSQL 14.4, qui sort en dehors du cycle habituel, comme c’est le cas lors de corrections urgentes.

Description

Le problème a été introduit dans la version majeure 14 de PostgreSQL et impacte toutes les versions mineures (14.0 à 14.3). Il vient de l’amélioration apportée au mécanisme de VACUUM permettant d’ignorer les transactions exécutant les commandes CREATE INDEX CONCURRENTLY et REINDEX CONCURRENTLY. Ces changements rendent possible la perte de lignes de données marquées comme HOT-updated ou HOT-pruned dans les index créés avec l’option CONCURRENTLY. Cette dernière option étant utile pour ne pas mettre de verrou exclusif d’accès sur les tables.

Cette corruption silencieuse est causée par un problème existant dans la construction concurrente d’index avec l’option CONCURRENTLY, laissant ce dernier dans un état corrompu.

Tout utilisateur des versions mineures 14.0 à 14.3 doit procéder à la mise à jour vers 14.4 dès sa sortie le 16 juin prochain.

Correction

Si vous avez besoin d’apporter une correction immédiate à ce problème avant la disponibilité de la mise à jour, il vous est possible de supprimer les index existants et de les recréer avec la commande CREATE INDEX ou REINDEX mais sans l’option CONCURRENTLY.

Vous pouvez aussi uitiser la commande reindexdb avec l’option -j (jobs) pour augmenter le parallélisme et diminuer l’interruption de service pendant la création des index.

Il vous est également possible de vérifier la présence d’index corrompus en utilisant l’utilitaire pg_amcheck. Ce dernier ne fonctionne que sur les index de type B-Tree. Il permet de contrôler que chaque ligne de données possède une entrée dans l’index correspondant, en vérifiant que la donnée pointée par l’index existe réellement.

Liens