Paris, le 12 novembre 2026
Le PostgreSQL Global Development Group a publié le 12 novembre une mise à jour pour toutes les versions supportées de PostgreSQL, c’est-à-dire les versions 18.7, 17.12, 16.16, 15.20 et 14.25, ainsi que la deuxième release candidate de PostgreSQL 19. Cette mise à jour corrige 52 failles de sécurité et plus de 140 bugs signalés au cours des derniers mois.
Plusieurs problèmes peuvent nécessiter des actions supplémentaires après la mise à jour ; ils sont décrits en détail ci-dessous. Consultez la section « Mise à jour » pour connaître les opérations à réaliser après la mise à jour.
Pour la liste complète, voir les Notes de version.

Fin de vie de PostgreSQL 14
Cette version est la dernière de PostgreSQL 14. PostgreSQL 14 est désormais en fin de vie et ne recevra plus de correctifs de sécurité ou de bugs. Si vous utilisez PostgreSQL 14 en production, nous vous suggérons de planifier une migration vers une version plus récente et supportée de PostgreSQL. Veuillez consulter notre politique de versionnement pour plus d’informations.
Problèmes de sécurité
Les failles de sécurité corrigées par cette mise à jour sont les suivantes, les liens ci-dessous donnent plus de détails sur chaque faille et sur les versions concernées :
- CVE-2026-6460 : une confusion de type après
ALTER ... SET DATA TYPEpermet l’exécution de code arbitraire (CVSS v3.1 : 8.8) - CVE-2026-6467 : une mauvaise gestion du schéma dans les scripts d’extension permet l’exécution de SQL arbitraire (CVSS v3.1 : 7.2)
- CVE-2026-14661 :
dblinket les souscriptions peuvent ajouter des données à la fin de fichiers arbitraires (CVSS v3.1 : 8.1) - CVE-2026-16237 :
INSERT ... ON CONFLICTpeut lire ou modifier des lignes malgré la conditionWHEREd’une vue modifiable automatiquement (CVSS v3.1 : 5.4) - CVE-2026-16240 :
pg_basebackuppeut utiliser le contenu du manifeste de sauvegarde comme format de chaîne de caractères (CVSS v3.1 : 3.7) - CVE-2026-18447 : une confusion de type sur un paramètre de sortie permet l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-116303 : les conversions liées aux clés étrangères et à JSON contournent le droit
EXECUTEsur les fonctions de transtypage (CVSS v3.1 : 3.1) - CVE-2026-116304 : une utilisation de mémoire déjà libérée (use-after-free) sur le typmod d’un
RECORDen parallélisme permet l’exécution de code arbitraire (CVSS v3.1 : 8.8) - CVE-2026-116306 : la modification d’un type composite pendant l’affectation d’un champ permet l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-116307 : un use-after-free sur les requêtes préparées de
plperlpermet l’exécution de code arbitraire (CVSS v3.1 : 8.8) - CVE-2026-116308 :
dict_intlit au-delà des lexèmes de longueur nulle (CVSS v3.1 : 4.3) - CVE-2026-116309 : une confusion de type sur les références « bénies » (blessed) de
plperlpeut permettre l’exécution de code arbitraire (CVSS v3.1 : 8.8) - CVE-2026-116310 : le contexte d’erreur de
COPYutilise une zone de stockage de champ déjà libérée (CVSS v3.1 : 4.3) - CVE-2026-116311 :
DROP OWNEDpeut supprimer des politiques restrictives de sécurité au niveau ligne sur des tables dont le rôle n’est pas propriétaire (CVSS v3.1 : 5.4) - CVE-2026-116312 :
MERGEpeut placer la mauvaise ligne dans une table de transition de trigger (CVSS v3.1 : 5.4) - CVE-2026-116313 :
vacuumdb --missing-stats-onlypermet au propriétaire d’une base d’exécuter du code en tant que l’utilisateur lançantvacuumdb(CVSS v3.1 : 7.2) - CVE-2026-116314 :
pg_restoreexécute du code arbitraire en raison d’une validation manquante des archives qui ne sont pas au format texte (CVSS v3.1 : 8.8) - CVE-2026-116315 : un dépassement de tampon sur le tas dans
tsvector_delete()permet l’exécution de code arbitraire (CVSS v3.1 : 8.8) - CVE-2026-116316 : les opérations à sécurité restreinte peuvent créer dans
pg_tempdes types que les requêtes suivantes de la session trouvent (CVSS v3.1 : 8.8) - CVE-2026-116317 : un dépassement de tampon sur le tas dans
ts_rank_cd()peut permettre l’exécution de code arbitraire (CVSS v3.1 : 8.8) - CVE-2026-116318 : dans
pg_dump, le nom d’une contrainteNOT NULLpermet une injection SQL (CVSS v3.1 : 8.8) - CVE-2026-116319 : un use-after-free lors d’un appel réentrant à
return_next()dansplperlpermet l’exécution de code arbitraire (CVSS v3.1 : 8.8) - CVE-2026-116320 : un use-after-free dans la conversion des tableaux et des hachages de
plperlpermet l’exécution de code arbitraire (CVSS v3.1 : 8.8) - CVE-2026-116321 : une valeur de type
namenon terminée divulgue le contenu de la mémoire du serveur (CVSS v3.1 : 4.3) - CVE-2026-116322 : une demande d’annulation avant authentification peut laisser un spinlock non relâché (CVSS v3.1 : 5.3)
- CVE-2026-116323 : un use-after-free lors d’une conversion réentrante de résultat dans
pltclpermet l’exécution de code arbitraire (CVSS v3.1 : 8.8) - CVE-2026-116325 : la mise entre guillemets des noms d’index par
reindexdbpermet une injection SQL (CVSS v3.1 : 8) - CVE-2026-116326 : les exceptions des objets liés (tied) de
plperlsuivent unsigjmp_bufpérimé (CVSS v3.1 : 8.8) - CVE-2026-116327 : l’analyse de
security_barrierpeut exposer des valeurs cachées au travers d’expressions indirectes (CVSS v3.1 : 4.3) - CVE-2026-116328 : un dépassement d’entier dans le contexte mémoire Generation permet l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-116329 : une confusion de type lors de l’import de statistiques permet l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-116330 : le fichier
restore.sqld’une archive tar depg_dumpne bloque pas l’injection de commandes psql (CVSS v3.1 : 8.8) - CVE-2026-116331 : une confusion de type dans les agrégats min/max permet l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-116332 : un use-after-free lors de la mise en place d’un portail (requêtes préparées) permet l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-116333 : un parcours parallèle d’index B-tree sur un tableau de valeurs lit au-delà des limites du tableau (CVSS v3.1 : 6.5)
- CVE-2026-116335 : une confusion sur le type de résultat d’un commutateur ou d’un négateur permet l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-116336 :
REINDEX CONCURRENTLYne bloque pasDROP INDEXpendant l’exécution des fonctions d’index (CVSS v3.1 : 8.8) - CVE-2026-120139 : un dépassement d’entier sur la taille des lignes permet l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-120141 : une confusion de type sur une fonction matérialisée renvoyant un ensemble permet l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-120142 : une confusion de type sur une colonne supprimée permet l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-120143 : un use-after-free sur un curseur de table de transition permet l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-120144 : un défaut d’invalidation du cache de types permet l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-120145 : la réplication logique peut écrire dans les catalogues système de l’abonné, ce qui permet l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-120146 :
REASSIGN OWNEDcontourne les vérificationsSETetCREATEDBsur les rôles (CVSS v3.1 : 4.3) - CVE-2026-120147 : un use-after-free lors d’une déconnexion réentrante de
dblinkpermet l’exécution de code arbitraire (CVSS v3.1 : 8.8) - CVE-2026-120148 : une confusion de pseudo-type dans les statistiques étendues permet l’exécution de code arbitraire (CVSS v3.1 : 8.1)
- CVE-2026-120149 : une incohérence dans l’insertion par lots d’un FDW permet l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-120150 : un use-after-free lors de la vérification de domaine d’un enregistrement étendu (expanded record) permet l’exécution de code arbitraire (CVSS v3.1 : 8.8)
- CVE-2026-120151 : une confusion de type sur un champ d’enregistrement en
plpgsqlpermet l’exécution de code arbitraire (CVSS v3.1 : 8.8) - CVE-2026-120152 : un use-after-free dans
pg_show_all_settings()divulgue de la mémoire (CVSS v3.1 : 4.3) - CVE-2026-120153 : les substitutions dans les scripts d’extension permettent une injection SQL au travers des noms d’objets (CVSS v3.1 : 7.2)
- CVE-2026-120154 :
INSERT ... ON CONFLICTpeut lire des lignes malgré les politiques de sécurité au niveau ligne (RLS) (CVSS v3.1 : 4.3)
Corrections de bugs et améliorations
Cette mise à jour corrige plus de 140 bugs signalés au cours des derniers mois. Les problèmes listés ci-dessous concernent PostgreSQL 18. Beaucoup d’entre eux touchent également les autres versions supportées de PostgreSQL.
- Correction de l’export et de l’import d’instantanés (snapshots) pris sur un serveur secondaire. Le problème a été détecté lors d’un
pg_dumpparallélisé lancé sur un secondaire, et pouvait corrompre à la fois la sauvegarde produite et les données du secondaire. Plus généralement, une transaction important un instantané pris sur un secondaire pouvait renvoyer des résultats erronés. - Plusieurs corrections sur les index GIN, qui pouvaient mener à une corruption de l’index : des requêtes manquaient alors des lignes ou renvoyaient des lignes sans rapport. Si vous soupçonnez qu’un index GIN est touché, vous devriez le réindexer. Consultez les notes de version pour plus de détails sur le problème, et la section « Mise à jour » pour les opérations à réaliser après la mise à jour.
- Correction d’une corruption possible des index GiST de
pg_trgm, qui pouvait faire manquer des lignes aux recherches. Une réindexation est nécessaire après la mise à jour ; voir la section « Mise à jour ». - Correction d’un cas où, après la reconstruction par
REINDEX CONCURRENTLYd’un index d’une table TOAST, des mises à jour ultérieures de l’index pouvaient être perdues, ce qui provoquait des erreursmissing chunk number. Si vous avez rencontré ce problème, il faudra réindexer après la mise à jour. Voir la section « Mise à jour ». - Interdiction des contraintes
NOT NULL NO INHERITsur les tables partitionnées dans tous les cas, y compris avecCREATE TABLE ... LIKE. Auparavant, une partition pouvait ainsi contenir des valeursNULLalors qu’elle n’aurait pas dû. La section « Mise à jour » indique comment trouver et réparer les contraintes concernées. - Désactivation de la déduplication des index B-tree pour les colonnes déclarées en
bpcharsans longueur, qui pouvait fausser les résultats des parcours d’index seul (index-only scans). Si vous avez des index B-tree sur des colonnesbpchar, vous devriez les réindexer après la mise à jour. Voir la section « Mise à jour ». - Plusieurs corrections sur les sauvegardes incrémentales, qui pouvaient produire des sauvegardes corrompues. Nous recommandons de réaliser une nouvelle sauvegarde complète après la mise à jour et de l’utiliser pour les sauvegardes incrémentales suivantes. Voir la section « Mise à jour ».
- Plusieurs corrections sur les sauvegardes de base (base backups), dont la prévention d’une copie incohérente du fichier
pg_controlet de copies tronquées ou complétées par des zéros de fichiers commepostgresql.auto.conf, remplacés pendant la sauvegarde. - Refonte de l’implémentation de la suppression de jointures dans le planificateur. Il s’agit d’un changement important pour une version mineure, réalisé pour mettre fin aux bugs à répétition de l’implémentation précédente.
- Correction d’une perte possible de lignes pendant la réécriture d’une table (par exemple
CLUSTERouVACUUM FULL) lorsqu’une ligne avait été mise à jour par une sous-transaction ensuite annulée. - Correction des durées d’entrées/sorties rapportées par le
VACUUMparallélisé. - Plusieurs corrections de problèmes pouvant causer une perte ou une incohérence de données après un crash, notamment le démarrage d’un checkpoint pendant la création d’un multixact ou pendant l’annulation d’une transaction préparée. Cette version écrit aussi de manière atomique les fichiers d’état des transactions préparées en attente : un crash pouvait auparavant laisser un fichier invalide qui empêchait le serveur de démarrer.
- Plusieurs corrections dans le planificateur, qui pouvait produire des résultats erronés, notamment pour les requêtes avec des références
LATERAL, des jointures externes, l’élimination d’auto-jointures sur des tables utilisant l’héritage, unDISTINCT ONdans une sous-requête avec des fonctions renvoyant des ensembles, et les requêtes utilisant des collations non déterministes. - Plusieurs corrections sur l’élagage des partitions (partition pruning), qui pouvait faire manquer des lignes, notamment pour les tables partitionnées par
RANGEsur plusieurs colonnes quand une requête ne filtre que sur les premières colonnes, pour les partitionsDEFAULTde tables utilisant les bornesMINVALUEouMAXVALUE, et pour des mises à jour concurrentes qui pouvaient ignorer silencieusement des lignes à mettre à jour. - Correction d’
INSERT ... ON CONFLICTpour acquérir un verrou de prédicat sur la ligne en conflit en isolationSERIALIZABLE. Auparavant, des mises à jour concurrentes qui auraient dû échouer avec une erreur de sérialisation pouvaient réussir. - Correction de
MERGEavecWHEN NOT MATCHED BY SOURCElorsque la ligne cible est supprimée de manière concurrente. Auparavant, une actionWHEN NOT MATCHED BY TARGETpouvait être exécutée à la place, donnant des résultats incorrects. - Plusieurs corrections sur les fonctions SQL/JSON comme
JSON_TABLEetJSON_VALUE, qui pouvaient renvoyer des résultats incorrects. - Plusieurs corrections sur la réplication logique, où un abonné pouvait appliquer des modifications de manière incorrecte.
- Plusieurs corrections sur les serveurs secondaires, évitant notamment des retards de rejeu et des annulations de requêtes inutiles dans certains cas.
- Correction de
psqlpour accepter plusieurs commandesCOPY ... FROM STDINdans une même chaîne de commandes. Le correctif de CVE-2026-6464 amenaitpsqlà les rejeter. - Plusieurs corrections de problèmes pouvant empêcher la restauration d’une sauvegarde logique, ou amener une vue restaurée à se comporter différemment de l’originale. Sont concernées les vues et règles utilisant
AT TIME ZONEdans une clauseFROMou un alias de cible nomméset, ainsi que des valeurstsvectorettsqueryqui pouvaient ne pas se recharger. - Correction d’un blocage du serveur, au lieu d’un arrêt, lorsque le processus de démarrage (startup) plante pendant que le serveur redémarre après un crash.
Cette version met également à jour les fichiers de fuseaux horaires vers la version 2026f de tzdata. À partir de novembre 2026, les Territoires du Nord-Ouest du Canada (America/Inuvik) restent toute l’année à UTC-06 et le Manitoba (America/Winnipeg) toute l’année à UTC-05. Cette version suppose que leurs abréviations de fuseau seront respectivement CST et EST (ce qui pourrait changer). Elle tient aussi compte du maintien de Cuba à l’heure d’été cet hiver, et du fait que les noms de zones EST5EDT, CST6CDT, MST7MDT et PST8PDT utilisent désormais, pour les anciens horodatages, le décalage UTC qu’ils indiquent plutôt que l’historique de la zone nommée d’après une ville qui leur est associée.
Mise à jour
Toutes les mises à jour mineures de PostgreSQL sont cumulatives. Comme pour les autres versions mineures, il n’est pas nécessaire d’exporter et de recharger les bases ni d’utiliser pg_upgrade pour appliquer cette mise à jour ; il suffit d’arrêter PostgreSQL et de mettre à jour ses binaires.
Si vous soupçonnez qu’un index GIN est touché par l’un des problèmes de corruption corrigés dans cette version, vous devriez le réindexer, par exemple :
REINDEX INDEX nom_de_votre_index;
Si vous utilisez pg_trgm, vous devriez réindexer tous les index GiST utilisant la classe d’opérateurs gist_trgm_ops.
Si vous rencontrez des erreurs missing chunk number à la lecture d’une table, vous devriez réindexer la table, ce qui réindexe aussi sa table TOAST, par exemple :
REINDEX TABLE nom_de_votre_table;
Si vous utilisez les sauvegardes incrémentales, nous recommandons de réaliser une nouvelle sauvegarde complète après la mise à jour et de la prendre comme base des sauvegardes incrémentales suivantes.
Si vous utilisez des tables partitionnées, la requête suivante trouve les contraintes NOT NULL NO INHERIT posées sur des tables partitionnées :
SELECT conrelid::regclass, conname
FROM pg_constraint
WHERE contype = 'n' AND connoinherit
AND conrelid IN (SELECT oid FROM pg_class WHERE relkind = 'p');
Vous pouvez supprimer les contraintes indésirables avec ALTER TABLE ... DROP CONSTRAINT .... Les contraintes à conserver doivent être réparées avec ALTER TABLE ... ALTER CONSTRAINT ... INHERIT, qui échouera si l’une des partitions de la table contient des valeurs NULL dans cette colonne.
Si vous avez des index B-tree sur des colonnes bpchar (c’est-à-dire des colonnes déclarées en bpchar sans longueur), vous devriez les réindexer après la mise à jour. Les colonnes déclarées en char(n) ne sont pas concernées.
Les utilisateurs ayant sauté une ou plusieurs mises à jour mineures peuvent avoir à réaliser des opérations supplémentaires après la mise à jour ; veuillez consulter les notes de version des versions précédentes pour les détails.
Pour plus de détails, veuillez consulter les notes de version.
Note sur PostgreSQL 19 RC 2
Cette publication constitue la deuxième release candidate de PostgreSQL 19. En tant que release candidate, PostgreSQL 19 RC 2 sera en grande partie identique à la version initiale de PostgreSQL 19, même si d’autres correctifs pourront encore être appliqués avant la disponibilité générale de PostgreSQL 19. PostgreSQL 19 RC 2 inclut aussi les correctifs de cette mise à jour mineure qui s’appliquent à PostgreSQL 19.
La date prévue pour la disponibilité générale de PostgreSQL 19 est le 19 novembre 2026. Voir la section « Calendrier de sortie » pour plus de détails.
Migration vers PostgreSQL 19 RC 2
Pour migrer vers PostgreSQL 19 RC 2 depuis une version antérieure de PostgreSQL, il faut utiliser une stratégie de mise à jour majeure, par exemple pg_upgrade ou pg_dump / pg_restore. Pour plus d’informations, consultez la section de la documentation sur les mises à jour :
https://www.postgresql.org/docs/19/upgrading.html
Si vous utilisez pg_upgrade et que vous avez des index utilisant la recherche plein texte, pg_trgm ou fuzzystrmatch, veuillez lire la section « Migration to Version 19 » des notes de version : il peut être nécessaire de les réindexer après la migration.
Changements depuis la RC 1
Plusieurs corrections de bugs ont été appliquées à PostgreSQL 19 pendant la période de la RC 1, parmi lesquelles :
- Retrait d’un changement qui permettait d’utiliser des expressions
JSON_ARRAY()etJSON_OBJECT()portant sur des tableaux, des types composites et des types d’intervalle (range) dans les index sur expression, les colonnes générées et les clés de partitionnement : ces index pouvaient devenir obsolètes. Si vous avez créé de tels objets en testant PostgreSQL 19, vous devez les supprimer ou les redéfinir avant la migration :pg_dump/pg_restoreetpg_upgradeéchoueront à les recréer. - Correction de résultats erronés dans les requêtes
GROUPING SETS, où une colonne absente de l’ensemble de regroupement courant pouvait afficher une valeur au lieu deNULL. - Correction d’une boucle infinie dans
first_value()etnth_value()avecIGNORE NULLSet certaines optionsEXCLUDEde la fenêtre. - Correction de l’agrégation anticipée (eager aggregation), qui exécutait les fonctions volatiles d’une condition de jointure une fois par groupe au lieu d’une fois par ligne.
- Correction d’une attente infinie lors de la promotion d’un serveur secondaire si une session est bloquée sur l’envoi de données à un client qui a cessé de lire.
- Correction d’un blocage de la file
LISTEN/NOTIFYsi une session est interrompue pendant la lecture des notifications. - Correction de vérifications de clés étrangères qui pouvaient échouer avec une erreur lorsque le type de la colonne référençante nécessite un transtypage pour être comparé à la colonne référencée.
- Correction de régressions de performance dans l’exécution de requêtes à base de hachage, dont des tables de hachage qui pouvaient être dimensionnées bien au-delà de la limite
work_memà partir de l’estimation du nombre de lignes par le planificateur.
Pour une liste détaillée des corrections, consultez la page des points ouverts.
Calendrier de sortie
Il s’agit de la deuxième release candidate de PostgreSQL 19. Sauf découverte d’un problème imposant un report ou une release candidate supplémentaire, PostgreSQL 19 devrait être disponible le 19 novembre 2026.
Pour plus d’informations, consultez la page Beta Testing.
Liens
- PostgreSQL (491) ,
- release (101) ,
- mineure (42) ,
- sécurité (72) ,
- 19 (3) ,
- 18 (12) ,
- 17 (18) ,
- 16 (23) ,
- 15 (25) ,
- 14 (35) ,
- update (57)