Le PostgreSQL Global Development Group annonce la sortie d’une mise à jour pour toutes les versions supportées de PostgreSQL, incluant les versions 18.6, 17.11, 16.15, 15.19 et 14.24, ainsi que la troisième version bêta de PostgreSQL 19. Cette publication corrige 28 vulnérabilités de sécurité et plus de 110 bugs signalés ces derniers mois.
Cette mise à jour passe directement de la version 18.4 à 18.6 pour PostgreSQL 18, la version 18.5 n’ayant pas été publiée en raison d’une régression.
Trois problèmes nécessitent une attention particulière après la mise à jour :
- Les constructions d’index GIN en parallèle
- Le module btree_gist
- Le module ltree
Pour la liste complète des modifications, veuillez consulter les notes de version.
Avis de fin de support pour PostgreSQL 14
PostgreSQL 14 cessera de recevoir des correctifs le 12 novembre 2026. Si vous utilisez PostgreSQL 14 en production, il est fortement recommandé de prévoir une migration vers une version plus récente et supportée. Consultez notre politique de versionnement pour plus d’informations.
Vulnérabilités de sécurité corrigées
Cette mise à jour corrige les vulnérabilités suivantes (la liste complète des CVE est disponible dans les notes de version) :
- CVE-2026-6464 : psql COPY FROM STDIN traite les lignes de données comme des commandes psql en cas d’échec précoce (CVSS v3.1 : 8.1)
- CVE-2026-6469 : ALTER TABLE ALTER TYPE réinitialise la propriété des statistiques étendues (CVSS v3.1 : 3.8)
- CVE-2026-6470 : Absence de vérification du privilège USAGE sur les types (CVSS v3.1 : 4.3)
- CVE-2026-6471 : Le décodage logique peut charger des fichiers arbitraires via dlopen (CVSS v3.1 : 7.2)
- CVE-2026-14662 : tsvector et tsquery sous-allouent de la mémoire via un débordement d’entier (CVSS v3.1 : 8.8)
- CVE-2026-14663 : pgcrypto, pour les chiffrement désactivés par OpenSSL, chiffrent et déchiffrent silencieusement en clair (CVSS v3.1 : 6.5)
- CVE-2026-14664 : Débordement de tampon dans les expressions régulières permettant l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-14666 : La mise en cache des règles de sécurité ignore les modifications de rôle (CVSS v3.1 : 4.2)
- CVE-2026-14668 : Confusion de type dans l’estimateur de sélectivité ctid divulgant des informations dérivées de lectures arbitraires (CVSS v3.1 : 8.1)
- CVE-2026-14669 : Débordement de tampon dans to_char permettant l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-14670 : Débordement de tampon dans les objets liés de plperl permettant l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-14671 : Confusion de type dans le cache de plan refint permettant l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-14672 : Différence observable dans les réponses avec scram_iterations non par défaut, fournissant un oracle d’existence d’utilisateur (CVSS v3.1 : 5.3)
- CVE-2026-14673 : amcheck ne nettoie pas le chemin de recherche non fiable (CVSS v3.1 : 3.8)
- CVE-2026-14676 : Débordement de tampon dans pg_stat_statements permettant l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-14677 : Sous-allocation mémoire dans pltcl et plperl 32 bits via un débordement d’entier (CVSS v3.1 : 8.8)
- CVE-2026-14678 : pg_trgm picksplit lit au-delà de la fin du tampon (CVSS v3.1 : 4.3)
- CVE-2026-14679 : Débordement de tampon dans la pile lors de la correspondance d’arguments, écrivant 0x0 et 0x1 en mémoire serveur (CVSS v3.1 : 8.2)
- CVE-2026-14680 : Confusion de type via des arguments « internes » (CVSS v3.1 : 8.8)
- CVE-2026-14681 : Application incorrecte du chiffrement GSSAPI lorsqu’il est couplé à SSL (CVSS v3.1 : 4.2)
- CVE-2026-15741 : EXTRACT permet une injection SQL via son argument (CVSS v3.1 : 8.8)
- CVE-2026-15742 : fuzzystrmatch écrit à des adresses arbitraires via un débordement d’entier (CVSS v3.1 : 8.8)
- CVE-2026-16238 : Confusion de type dans pg_restore_attribute_stats() permettant l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-16239 : Confusion de type lors de la fermeture et déclaration d’un curseur permettant l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-16241 : Sous-débordement d’entier dans ECPG pouvant faire planter le client (CVSS v3.1 : 3.8)
- CVE-2026-18024 : La fonction ascii() lit au-delà de la fin du tampon (CVSS v3.1 : 4.3)
- CVE-2026-18408 : psql \unrestrict permet à un superutilisateur du serveur d’origine de pg_dump d’exécuter du code arbitraire dans le client psql (CVSS v3.1 : 8.8)
- CVE-2026-19385 : Débordement de tampon dans pg_dump permettant l’exécution de code arbitraire (CVSS v3.1 : 8.8)
Corrections de bugs et améliorations
Cette mise à jour corrige plus de 110 bugs signalés ces derniers mois. Parmi les corrections notables :
- Correction d’un auto-blocage lors de la relecture du WAL généré par une ancienne version mineure, qui pouvait bloquer un serveur en attente suivant un serveur principal exécutant une version mineure plus ancienne.
- Correction des constructions d’index GIN en parallèle pour mettre à jour correctement la valeur reltuples dans pg_class. Auparavant, un worker parallèle pouvait rapporter un nombre de lignes non initialisé, laissant reltuples avec une valeur erronée (y compris Infinity ou NaN), empêchant autovacuum et autoanalyze de traiter la table.
- Plusieurs corrections pour btree_gist, notamment la gestion des NaN pour float4/float8 et le tri correct des valeurs bit/bit varying lors de la construction d’index.
- Correction d’un débordement d’entier dans les comparaisons ltree : les valeurs ltree contenant plus de 14 653 étiquettes pouvaient être comparées incorrectement, ce qui pouvait corrompre un index B-tree.
- Correction de l’élagage de partitions pour les tables partitionnées par RANGE, afin que la partition DEFAULT ne soit plus ignorée lorsqu’elle devrait être analysée.
- Amélioration des performances des jointures par hachage en présence de plusieurs clés de jointure et de nombreuses valeurs NULL.
- Corrections du planificateur pouvant produire des résultats de requêtes incorrects, notamment pour les tests value IN (array) avec des tableaux potentiellement vides, et les fonctions de fenêtre COUNT() utilisant une clause EXCLUDE ou sans ORDER BY.
- Restauration d’une optimisation d’analyse d’index convertissant un motif de correspondance exacte LIKE ou d’expression régulière en une condition d’index d’égalité lorsque les collations de l’index et de l’expression diffèrent.
- Corrections de jsonpath, notamment pour les opérateurs @? et @@ qui lèvent désormais correctement une erreur pour une variable non définie dans l’expression de chemin.
- Mise à jour des fichiers de données de fuseaux horaires vers la version tzdata 2026c, reflétant les changements pour l’Alberta (passage à l’UTC-06 permanent à partir de novembre 2026) et le Maroc (passage à l’UTC+00 permanent à partir du 20 septembre 2026).
Mise à jour
Toutes les mises à jour de PostgreSQL sont cumulatives. Comme pour les autres versions mineures, il n’est pas nécessaire de vider et recharger votre base de données ou d’utiliser pg_upgrade pour appliquer cette mise à jour : il suffit d’arrêter PostgreSQL et de mettre à jour ses binaires.
Étapes recommandées après la mise à jour
Pour les tables avec des index GIN : Vérifiez que la valeur reltuples est correcte. Un bug précédent pouvait laisser reltuples avec une valeur erronée (comme Infinity ou NaN), empêchant autovacuum et autoanalyze de traiter la table. Exécutez la requête suivante pour lister les tables concernées :
SELECT DISTINCT t.oid::regclass, t.reltuples
FROM pg_class t
JOIN pg_index i ON t.oid = i.indrelid
JOIN pg_class ic ON i.indexrelid = ic.oid
WHERE t.relhasindex AND ic.relam = 2742;Pour toute table dont la valeur reltuples semble incorrecte, exécutez ANALYZE ou créez un autre index pour réinitialiser la valeur.
Pour les utilisateurs de btree_gist : Reconstruisez les index btree_gist sur les colonnes float4 ou float8 pouvant contenir des valeurs NaN, ainsi que sur les colonnes bit ou bit varying :
REINDEX INDEX nom_de_votre_index;
Pour les utilisateurs de ltree : Si vous utilisez des index B-tree sur des valeurs ltree contenant un très grand nombre d’étiquettes (plus de 14 653), reconstruisez ces index, car ils pourraient être corrompus :
REINDEX INDEX nom_de_votre_index;
PostgreSQL 19 Bêta 3 : Appel à la communauté
Cette publication marque la troisième version bêta de PostgreSQL 19. Dans l’esprit de la communauté open source, nous vous encourageons vivement à tester les nouvelles fonctionnalités de PostgreSQL 19 sur vos systèmes pour nous aider à identifier et corriger les bugs et autres problèmes.
Nous ne recommandons pas d’utiliser PostgreSQL 19 Bêta 3 en production, mais nous vous invitons à tester vos charges de travail typiques avec cette version bêta. Votre retour est essentiel pour garantir que PostgreSQL 19 respecte nos standards de stabilité et de fiabilité.
Pour en savoir plus sur le processus de test bêta et comment contribuer : https://www.postgresql.org/developer/beta/
Changements depuis la Bêta 2
- Retour en arrière de GROUP BY ALL
- Plusieurs corrections pour la nouvelle syntaxe FOR PORTION OF des tables temporelles
- Corrections pour la synchronisation des séquences en réplication logique
- Correction d’une erreur de décodage logique concurrent
- Correction des problèmes liés aux changements de propriété des abonnements
- Correction des résultats de requêtes incorrects dans postgres_fdw lors de la descente d’une comparaison de tableau
- Correction d’un plantage lors des vérifications de clés étrangères impliquant une contrainte UNIQUE nullable
Liens utiles
- Téléchargement
- Notes de version
- Politique de sécurité
- Politique de versionnement
- Informations sur le test bêta
- Signaler un bug
Si vous avez des corrections ou des suggestions pour cette annonce, merci de les envoyer à la liste de diffusion publique pgsql-www@lists.postgresql.org.