Paris, le 11 août 2023

Hier, le PostgreSQL Global Development Group a publié une mise à jour pour toutes les versions supportées de PostgreSQL, notamment les versions 15.4, 14.9, 13.12, 12.16 et 11.21, ainsi que la troisième version bêta de PostgreSQL 16. Voici notre traduction.

visuel annonce

Cette version corrige deux failles de sécurité et plus de 40 bugs signalés au cours des derniers mois.

Si vous utilisez des index BRIN pour rechercher des valeurs NULL, vous devrez les réindexer après avoir mis à jour PostgreSQL vers une de ces versions. Sur PostgreSQL 12 et ultérieures, vous pouvez utiliser REINDEX CONCURRENTLY pour éviter de bloquer les écritures sur l’index et la table concernés, par exemple :

REINDEX INDEX CONCURRENTLY nom_de_votre_index ;

Pour la liste complète des modifications, veuillez consulter les notes de versions.

Fin de vie de PostgreSQL 11

PostgreSQL 11 cessera de recevoir des correctifs le 9 novembre 2023. Si vous utilisez PostgreSQL 11 dans un environnement de production, nous vous suggérons de planifier une mise à niveau vers une version plus récente et supportée de PostgreSQL. Veuillez consulter la politique de versionnement pour plus d’informations.

Correctifs de sécurité

  • CVE-2023-39417 : les scripts d’extension avec des @substitutions@ à l’intérieur d’une chaîne de caractères permettent l’injection SQL.

Les versions prises en charge et vulnérables : 11 - 15. L’équipe de sécurité ne teste généralement pas les versions non prises en charge, mais ce problème est assez ancien.

Un script d’extension est vulnérable s’il utilise @extowner@, @extschem@ : …@ à l’intérieur d’une construction de guillemets (guillemets en dollars, “, ou “”). Aucune extension intégrée n’est vulnérable. Les utilisations vulnérables apparaissent dans un exemple de documentation et dans des extensions ne faisant pas partie de la distribution PostgreSQL. Par conséquent, la condition préalable à l’attaque est qu’un administrateur ait installé des fichiers d’une extension vulnérable, fiable et ne faisant pas partie de la distribution PostgreSQL. Sous réserve de ces conditions préalables, cela permet à un attaquant ayant les droits CREATE au niveau de la base de données d’exécuter du code arbitraire en tant que superutilisateur initial. PostgreSQL bloque cette attaque au niveau serveur, il n’est donc pas nécessaire de modifier les extensions individuelles.

Le projet PostgreSQL remercie Micah Gate, Valerie Woolard, Tim Carey-Smith et Christoph Berg d’avoir signalé ce problème.

  • CVE-2023-39418 : MERGE n’applique pas les politiques de sécurité des lignes UPDATE ou SELECT.

Versions prises en charge et vulnérables : 15.

PostgreSQL 15 a introduit la commande MERGE, qui ne vérifie pas les nouvelles lignes avec les politiques de sécurité de ligne définies pour les ordres UPDATE et SELECT. Si les politiques UPDATE et SELECT interdisent une ligne que les politiques INSERT n’interdisent pas, un utilisateur pourrait stocker ces lignes. Les conséquences dépendent de l’application. Cela affecte uniquement les bases de données qui ont utilisé CREATE POLICY pour définir une politique de sécurité de ligne.

Le projet PostgreSQL remercie Dean Rasheed d’avoir signalé ce problème.

Note sur la version bêta de PostgreSQL 16

Cette version marque la troisième sortie bêta de PostgreSQL 16 et nous rapproche d’une disponibilité de la version 16 prévue vers la fin du troisième trimestre.

Dans l’esprit Open Source de PostgreSQL, nous vous encourageons vivement à tester les nouvelles fonctionnalités de PostgreSQL 16 sur vos systèmes pour nous aider à éliminer les bugs ou autres problèmes éventuels. Bien que nous ne vous conseillons pas d’exécuter PostgreSQL 16 bêta 3 dans des environnements de production, nous vous encourageons à trouver des moyens d’exécuter vos tests de charges habituels sur cette version bêta.

Vos tests et retours aideront la communauté à garantir que PostgreSQL 16 respecte nos normes afin d’assurer la livraison d’une version stable et fiable de ce système de gestion de bases de données Open Source. Pour en savoir plus, veuillez lire notre processus de tests pour la version bêta et savoir comment vous pouvez y contribuer : https://www.postgresql.org/developer/beta/

Vous pouvez trouver des informations sur toutes les fonctionnalités et modifications de PostgreSQL 16 dans les notes de version : https://www.postgresql.org/docs/16/release-16.html

Correctifs et améliorations

Cette mise à jour corrige plus de 40 bugs signalés au cours des derniers mois. Les problèmes énumérés ci-dessous affectent PostgreSQL 15. Certains de ces problèmes peuvent également affecter d’autres versions prises en charge par PostgreSQL.

  • Corrige la gestion des valeurs NULL dans les index BRIN. Cette correction ne s’applique pas aux index BRIN existants – vous devez exécuter REINDEX pour corriger tous les index BRIN utilisés pour rechercher les valeurs NULL.
  • Évite de laisser une base de données corrompue lorsque DROP DATABASE est interrompu.
  • Plusieurs corrections pour les index partitionnés.
  • Correction de l’erreur ALTER EXTENSION … SET SCHEMA si l’extension contient des objets en dehors du schéma de l’extension.
  • Correction du suivi des dépendances des méthodes d’accès aux tables.
  • N’utilise plus d’index uniques partiels comme preuve d’unicité dans le planificateur.
  • Corrige la gestion des sous-SELECT dans les expressions de politique RLS et les vues avec barrière de sécurité lors de l’expansion des actions de règles.
  • Correction des cas particuliers de concurrence dans la détection de conflits pour le mode d’isolation des transactions SERIALIZABLE.
  • Correction de défaillances intermittentes lors de tentative de mise à jour d’un champ d’une colonne composite nécessitant un TOAST.
  • Correction de plusieurs fuites de mémoire qui se produisaient pendant la durée de vie d’une requête.
  • Accepte les secondes fractionnaires dans l’argument de la fonction jsonpath datetime().
  • Augmentation de la limite des jetons dans pg_hba.conf et pg_ident.conf à 10 240 octets.
  • Une erreur de saturation mémoire provenant de JIT provoque désormais une erreur FATAL PostgreSQL au lieu d’une exception C++.
  • Permet à VACUUM de continuer après avoir détecté certains types de corruption d’index B-tree. Bien que cette correction permette à VACUUM de continuer, vous devez toujours procéder à un REINDEX pour réparer l’index cassé.
  • Évite de rejouer deux fois les transactions préparées lors de la reprise après un crash.
  • S’assure que le point de validation appelle fsync sur une table nouvellement créée mais vide.
  • Ne trace plus les erreurs “missing contrecord” pour éviter d’enregistrer des messages inexacts de pg_waldump et walsender.
  • Corrige la fonction fuzzystrmatch Soundex difference() pour gérer correctement les entrées vides.
  • Corrige plusieurs bugs dans intarray, y compris l’interdiction de tableaux d’entrée surdimensionnés dans un index GiST.
  • Corrige pg_dump pour gérer correctement les corps de fonctions SQL standard (BEGIN ATOMIC) qui requièrent des dépendances sur des index uniques au moment de l’analyse.

Pour obtenir la liste complète des changements disponibles, veuillez consulter les notes de versions.

Corrections dans PostgreSQL 16 bêta 3

  • Ajoute la commande \drg à psql pour afficher des informations sur les attributions de rôles.
  • Ajoute l’identifiant de la timeline aux noms de fichiers générés avec pg_waldump –save-fullpage.
  • Corrige un crash après un blocage dans un processus VACUUM parallélisé.

Veuillez consulter les notes de versions pour une liste complète des nouvelles fonctionnalités et des fonctionnalités modifiées : https://www.postgresql.org/docs/16/release-16.html

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 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.

Si vous utilisez des index BRIN pour rechercher des valeurs NULL, vous devrez les réindexer après avoir effectué la mise à jour de PostgreSQL vers une de ces versions. Sur PostgreSQL 12 et ultérieures, vous pouvez utiliser REINDEX CONCURRENTLY pour éviter de bloquer les écritures sur l’index et la table concernés, par exemple :

REINDEX INDEX CONCURRENTLY nom_de_votre_index ;

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 des versions précédentes pour plus de détails.

Mise à jour vers PostgreSQL 16 bêta 3

Pour mettre à niveau PostgreSQL 16 Bêta 3 depuis une version précédente de PostgreSQL 16 Bêta, ou une version majeure précédente de PostgreSQL, vous devrez utiliser une stratégie similaire à la mise à niveau entre les versions majeures de PostgreSQL (par exemple, pg_upgrade ou pg_dump / pg_restore). Pour plus d’informations, veuillez consulter la section de documentation sur la mise à jour.

Test des bogues et de la compatibilité

La stabilité de chaque version de PostgreSQL dépend grandement de vous, la communauté, pour tester la version à venir avec vos charges de travail et vos outils de test afin de trouver les bogues et les régressions avant la disponibilité générale de PostgreSQL 16. Comme il s’agit d’une version bêta, des changements mineurs dans le comportement des bases de données, les détails des fonctionnalités et les API sont encore possibles. Vos commentaires et vos tests aideront à déterminer les derniers ajustements sur les nouvelles fonctionnalités, alors n’hésitez pas à tester dans un futur proche. La qualité des tests effectués par les utilisateurs nous aidera à déterminer la date de sortie de la version finale.

Une liste des problèmes ouverts est disponible publiquement sur le wiki de PostgreSQL. Vous pouvez rapporter des bogues en utilisant ce formulaire sur le site web de PostgreSQL : https://www.postgresql.org/account/submitbug/

Liens


DALIBO

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