LOXODATA

PostgreSQL 18.3 et autres correctifs

2026-02-27   656 mots, 4 minutes de lecture

Le PGDG (PostgreSQL Global Development Group) a publié une mise à jour de toutes les versions supportées de PostgreSQL, incluant 18.3, 17.9, 16.13, 15.17 et 14.22.

Cette publication hors cycle corrige des régressions relevées depuis la dernière publication de la 18.2 du 12 février 2026.

Pour la liste complète des changements, se référer à la section Notes de publication.

Corrections de bogues et améliorations

Cette mise à jour corrige plusieurs bogues ayant été signalés après la dernière publication. Les problèmes ci-dessous concernent PostgreSQL 18. Certains de ces problèmes peuvent aussi concerner d’autres versions de PostgreSQL.

  • correction d’une anomalie où un standby est stoppé sur une erreur de type could not access status of transaction;
  • correction d’une erreur sur la fonction substring() qui remonte l’erreur invalid byte sequence for encoding sur des valeurs de texte non ASCII si la source de cette valeur est une colonne, et introduit par la correction CVE-2026-2006;
  • correction de la fonction strict_word_similarity dans pg_trgm qui peut entraîner des résultats incorrects ou des plantages. Cela est dû à une omission dans la correction de CVE-2026-2007;
  • correction de la volatilité des fonctions json_strip_nulls() et jsonb_strip_nulls() afin qu’elles soient immutables, comme dans les versions précédentes, ce qui permet de les utiliser dans les index. Si vous avez déjà effectué une mise à niveau vers PostgreSQL 18.0 à 18.2, consultez les étapes supplémentaires dans la section « Mise à jour »;
  • correction des tests NOT NULL dans la sous-requête LATERAL UNION ALL qui peuvent entraîner des résultats de requête erronés;
  • éviter que les contraintes NOT NULL ne génèrent des conflits de noms avec les contraintes écrites par l’utilisateur;
  • correction de pg_stat_get_backend_wait_event() et pg_stat_get_backend_wait_event_type() pour qu’elles rapportent les valeurs des processus auxiliaires, comme pg_stat_activity;
  • correction de la conversion d’une variable de type composite en un type de domaine lors du renvoi de sa valeur à partir d’une fonction PL/pgSQL;
  • correction de la fonction d’entrée binaire hstore pour éviter les plantages lors de l’entrée de clés dupliquées.

Mise à jour

Toutes les publications de mises à jour de PostgreSQL sont cumulatives. Comme pour les autres mises à jour mineures, il n’est pas nécessaire d’extraire et de recharger les bases de données ni d’utiliser pg_upgrade pour appliquer cette mise à jour ; il suffit simplement d’arrêter PostgreSQL et de mettre à jour les binaires.

Si vous aviez mis à jour depuis la version 18.0, 18.1 ou 18.2 de PostgreSQL, vous aurez besoin d’exécuter le script SQL suivant avec un rôle PostgreSQL superuser dans toutes vos bases de données pour rendre les fonctions json_strip_nulls() et jsonb_strip_nulls() immutables.

UPDATE pg_catalog.pg_proc SET provolatile = 'i' WHERE oid IN ('3261','3262');

Vous devrez exécuter cette commande dans les bases de données template0 et template1 pour que les futures bases de données créées disposent du bon type de volatilité pour les fonctions ci-dessus. Vous pouvez vous référer à la documentation sur les bases de données templates.

Les utilisateurs ayant sauté une ou plusieurs mises à jour peuvent avoir besoin d’étapes additionnelles après la mise à jour. Les notes de publication des versions précédentes fournissent les détails.

Pour plus de détails, se référer à la note de publication de versions.

Vous pouvez utiliser les commandes suivantes pour exécuter la requête sur toutes vos bases de données :

for db in $(psql -XAt -c "select datname from pg_database where datname not in ('template0')");
    do psql -d "${db}" -c "UPDATE pg_catalog.pg_proc SET provolatile = 'i' WHERE oid IN ('3261','3262');";
done

De même, pour l’appliquer sur la base de données template0, vous pouvez utiliser les commandes suivantes :

psql -U postgres <<_EOF_
ALTER DATABASE template0 ALLOW_CONNECTIONS = true; 
\c template0
UPDATE pg_catalog.pg_proc SET provolatile = 'i' WHERE oid IN ('3261','3262');
\c postgres
ALTER DATABASE template0 ALLOW_CONNECTIONS = false;
_EOF_

Liens

Si vous avez des corrections ou suggestions sur cette annonce de publication, merci de les envoyer à la mailing liste publique pgsql-www@lists.postgresql.org.