Paris le 17 juin 2022

Le PostgreSQL Global Development Group a publié une mise à jour pour la version 14, soit la version 14.4. Voici notre traduction.

visuel annonce

La version 14.4 corrige un problème pouvant entraîner une corruption silencieuse des données quand les ordres CREATE INDEX CONCURRENTLY ou REINDEX CONCURRENTLY sont utilisés.

Veuillez consulter la section ci-dessous pour savoir comment détecter et corriger la corruption silencieuse de données dans vos index.

Cette version corrige plus de 15 bugs signalés depuis la version PostgreSQL 14.3 sortie au mois de mai. Pour accéder à la liste de toutes les modifications, veuillez consulter les notes de mise à jour.

Cette version ne concerne que PostgreSQL 14. Le PostgreSQL Global Development Group publiera une mise à jour planifiée le 11 août 2022, pour toutes les versions supportées de PostgreSQL (de 10 à 14).

Détecter et corriger la corruption « CREATE INDEX CONCURRENTLY » / « REINDEX CONCURRENTLY »

PostgreSQL 14.4 corrige un problème avec les ordres CREATE INDEX CONCURRENTLY et REINDEX CONCURRENTLY qui peuvent provoquer une corruption silencieuse des données dans les index.

Avant ce correctif, les ordres CREATE INDEX CONCURRENTLY et REINDEX CONCURRENTLY auraient pu créer des index avec des entrées manquantes, ce qui aurait empêché les requêtes SELECT utilisant ces index de trouver certaines lignes.

Vos index n’ont peut-être pas été impactés, mais si vous n’en êtes pas certain, nous vous conseillons de les réindexer en utilisant les instructions ci-dessous.

Vous pouvez détecter si un index B-tree (le type d’index par défaut) contient des données corrompues en utilisant la commande pg_amcheck avec l’option --heapallindexed.

Par exemple :

pg_amcheck --heapallindexed database

Si pg_amcheck détecte une corruption ou si vous avez exécuté l’ordre CREATE INDEX CONCURRENTLY ou REINDEX CONCURRENTLY sur tout autre type d’index (par exemple GiST, GIN, etc.), veuillez suivre les instructions ci-dessous.

Une fois que vous avez mis à jour votre système vers PostgreSQL 14.4, vous pouvez corriger toutes les données qui ont été corrompues silencieusement en utilisant l’ordre REINDEX CONCURRENTLY. Par exemple, si vous avez un index nommé elephant_idx dont les données sont corrompues, vous pouvez exécuter la commande suivante avec PostgreSQL 14.4 pour résoudre ce problème :

REINDEX CONCURRENTLY elephant_idx;

Vous pouvez utiliser la commande reindexdb pour réindexer tous les index de votre instance. reindexdb a également une option --jobs qui vous permet d’exécuter des opérations de réindexation en parallèle. Par exemple, pour réindexer l’intégralité de votre instance PostgreSQL à l’aide de <N> tâches parallélisées, vous pouvez exécuter la commande suivante :

reindexdb --all --concurrently --jobs <N>

Corrections de bugs et améliorations

Cette mise à jour corrige 15 bugs rapportés ces derniers mois. Les problèmes ci-dessous concernent PostgreSQL 14.

Sont inclus dans cette mise à jour :

  • Plusieurs corrections pour la mémorisation du plan des requêtes.
  • Correction des requêtes dans lesquelles une « variable ligne » fait référence au résultat d’une fonction qui renvoie un domaine sur un type composite.
  • Correction de l’erreur du planificateur « variable not found in subplan target list » quand un sous-SELECT est référencé dans une fonction de REGROUPEMENT.
  • Correction d’une erreur de vérification dans COPY FROM lorsque l’encodage de la base de données est SQL_ASCII mais que l’encodage du client est un encodage multi-octets.
  • Signalement des familles d’opérateurs créées implicitement (générées par CREATE OPERATOR CLASS) pour les déclencheurs sur évènement.
  • Empêchement du déclenchement de wal_receiver_timeout sur une instance secondaire durant la réplication logique de longues transactions.
  • Suppression d’une vérification incorrecte du propriétaire d’une clé privée TLS dans la libpq.
  • Empêchement du plantage après la perte de connexion au serveur dans pg_amcheck.

Pour accéder à la liste de toutes les modifications, veuillez consulter les notes de mise à jour.

Mise à jour

Toutes les versions mineures de PostgreSQL sont cumulatives. Comme pour les autres versions mineures, les utilisateurs n’ont pas besoin d’exporter et de restaurer leur base de données, ou d’utiliser pg_upgrade pour mettre à jour vers cette version ; il suffit d’arrêter PostgreSQL et de mettre à jour ses binaires.

Cependant, si vous avez exécuté CREATE INDEX CONCURRENTLY ou REINDEX CONCURRENTLY avec PostgreSQL 14, vous devrez peut-être réaliser des étapes supplémentaires. Veuillez revoir la section « Détecter et corriger la corruption CREATE INDEX CONCURRENTLY / REINDEX CONCURRENTLY » ci-dessus pour de plus amples détails.

Les utilisateurs qui ont sauté une ou plusieurs mises à jour peuvent avoir besoin d’exécuter des étapes supplémentaires après la mise à jour ; veuillez consulter les notes de mise à jour des versions précédentes pour plus de détails.

Pour plus détails, veuillez consulter les notes de mise à jour.

Avis de fin de vie de PostgreSQL 10

PostgreSQL 10 cessera de recevoir des correctifs le 10 novembre 2022. Si vous utilisez PostgreSQL dans un environnement de production, nous vous suggérons de prévoir une mise à jour vers une version plus récente et supportée de PostgreSQL. Veuillez consulter notre politique de gestion des versions pour plus d’informations.

Liens


DALIBO

DALIBO est le spécialiste français de PostgreSQL®. Nous proposons du support, de la formation et du conseil depuis 2005.