Paris, le 13 février 2020

Le PostgreSQL Global Development Group vient de publier une mise à jour pour toutes les versions supportées de vos systèmes de bases de données, à savoir : 12.2, 11.7, 10.12, 9.6.17, 9.5.21 et 9.4.26. Cette sortie corrige plus de 75 bugs signalés sur les trois derniers mois.

Les utilisateurs doivent prévoir de mettre à jour dès que possible.

Fin de vie pour PostgreSQL 9.4

Cette mise à jour marque également la fin de vie de la version PostgreSQL 9.4, qui ne recevra plus aucun correctif de bogue ou de sécurité. PostgreSQL 9.4 a introduit les nouvelles fonctionnalités comme la prise en charge du format JSONB, la commande ALTER SYSTEM, la capacité de décoder les changements en flux à l’aide d’un plugin, et bien d’autres.

Bien que nous soyons très fiers de cette version, les fonctionnalités sont aussi présentes dans les versions plus récentes de PostgreSQL. Beaucoup de ces fonctionnalités ont reçu des améliorations, et de par notre politique de gestion de versions, il est temps de mettre PostgreSQL 9.4 au repos.

Veuillez planifier une mise à jour vers une version plus récente, supportée par la communauté, dès que possible. Veuillez consulter notre politique de gestion des versions pour de plus amples informations.

Correctifs de sécurité

  • CVE-2020-1720: ALTER ... DEPENDS ON EXTENSION n’a pas de contrôle de droits.

Versions concernées : 9.6 - 12

La sous-commande ALTER ... DEPENDS ON EXTENSION ne procède à aucun contrôle de droits, ce qui permet à un utilisateur non privilégié, sous certaines conditions, de supprimer n’importe quelle fonction, procédure, vue matérialisée, index ou triggers. Cette attaque est possible si un administrateur a installé une extension et qu’un utilisateur dispose d’un privilège CREATE ou que le propriétaire de l’extension exécute la commande DROP EXTENSION.

Le projet PostgreSQL remercie Tom Lane pour avoir rapporté ce problème.

Corrections de bugs et améliorations

Cette mise à jour corrige plus de 75 bugs rapportés ces derniers mois. Certains problèmes n’affectent que la version 12 mais d’autres peuvent concerner toutes les versions supportées.

Ces corrections comprennent :

  • Correctif pour les tables partitionnées avec des références de clés étrangères où TRUNCATE...CASCATE ne supprime pas toutes les données. Si vous avez déja utilisé TRUNCATE ... CASCADE sur une table partitionnée avec des références de clés étrangère, veuillez consulter la section “Mise à jour” pour les étapes de vérification et de nettoyage.
  • Correctif de l’échec de l’ajout de contraintes de clés étrangères à une table avec des sous-partitions (appelée aussi table partitionnée à plusieurs niveaux). Si vous avez déja utilisé cette fonctionnalité, vous pouvez corriger cela soit en détachant et en réajoutant la partition affectée, soit en supprimant et en recréant la contrainte de clé étrangère à la table mère. Vous trouverez plus d’informations sur la manière d’effectuer ces étapes dans la documentation ALTER TABLE.
  • Correctif d’un problème de performance pour les tables partitionnées introduit par le correctif pour CVE-2017-7484, qui permet désormais au planificateur d’utiliser des statistiques d’une table enfant pour une colonne à laquelle l’utilisateur est autorisé à accéder à la table parent lorsque la requête contient un d’opérateur « avec fuite » (leaky).
  • Plusieurs autres correctifs et changements pour les tables partitionnées, y compris l’interdiction des expressions de clés de partition qui renvoient des pseudo-types, comme RECORD.
  • Correctif pour les abonnés à la réplication logique dans l’exécution des triggers UPDATE par colonne.
  • Correctif de plusieurs pannes et échecs pour les abonnés et les éditeurs de la réplication logique.
  • Amélioration de l’efficacité de la réplication logique avec REPLICA IDENTITY FULL.
  • S’assure que l’appel de la fonction pg_replication_slot_advance() sur un slot de réplication conservera les changements après redémarrage.
  • Plusieurs correctifs pour le processus walsender.
  • Amélioration des performances des hash join avec de grandes tables internes.
  • Correctif du placement du champ “Subplans Removed” dans la sortie de EXPLAIN en le plaçant avec son plan parent Append ou MergeAppend.
  • Plusieurs correctifs pour les plans de requêtes parallèles.
  • Plusieurs correctifs pour les erreurs du planificateur de requêtes, dont une qui affectait les jointures des sous requêtes à une seule ligne.
  • Plusieurs correctifs pour les statistiques étendues MCV, dont une sur une estimation incorrecte des clauses OR.
  • Amélioration de l’utilisation des CPU avec plusieurs cœurs pour les nœuds hash join parallélisés.
  • Ignore l’option CONCURRENTLY lors d’une opération de création, de suppression d’index ou de ré-index sur une table temporaire.
  • Construction d’un index sans le parallélisme lorsque l’instruction CREATE INDEX ne dispose pas d’assez de mémoire partagé dynamique.
  • Plusieurs correctifs pour les index GiST et GIN
  • Correctif d’un crash possible sur les opérations d’index BRIN avec les types de données box, range et inet.
  • Correctif de la prise en charge des index hypothétique BRIN.
  • Correctif d’un échec d’ALTER TABLE lorsqu’une colonne référencée dans une expression GENERATED est ajoutée ou son type modifié plus tôt dans la même instruction ALTER TABLE.
  • Correctif de la gestion de multiples triggers AFTER ROW sur une table étrangère.
  • Correctif d’un écart de 1 pour EXTRACT(ISOYEAR FROM timestamp) pour les dates avant Jésus-Christ.
  • Empêche la mise en minuscule et la troncature non désirées des paramètres d’authentification RADIUS dans le fichier pg_hba.conf.
  • Plusieurs correctifs pour le support de GSSAPI, notamment l’acceptation par la libpq de tous les paramètres de connexions liés à GSS, même si GSSAPI n’est pas compilé.
  • Plusieurs correctifs pour pg_dump et pg_restore en mode parallélisation.
  • Correctif de crashs avec postgres_fdw lors d’une tentative d’exécution sur le serveur distant d’une requête comme UPDATE remote_tab SET (x,y) = (SELECT ...).
  • Interdit les valeurs de catégorie à NULL dans la fonction crosstab() de la contribution tablefunc pour éviter les crashs.
  • Plusieurs correctifs pour la version de PostgreSQL sous Windows, y compris une condition de concurrence qui pourrait entraîner des anomalies de timing avec la commande NOTIFY.
  • Plusieurs correctifs d’ecpg.

Pour une liste exhaustive des modification, veuillez consulter les notes de versions.

Mise à jour

Toutes les mises à jour de PostgreSQL sont cumulatives. Comme pour les autres mises à jour mineures, les utilisateurs n’ont pas à sauvegarder et restaurer leur base ou ni à utiliser pg_upgrade pour appliquer cette mise à jour ; vous pouvez simplement arrêter PostgreSQL et mettre à jour ses binaires.

Les utilisateurs ayant sauté une version ou plus peuvent avoir besoin d’ajouter des étapes supplémentaires après la mise à jour.

Si vous avez déjà exécuté TRUNCATE ... CASCADE sur une sous-partition d’une table partitionnée et que la table partitionnée a une référence de clé étrangère provenant d’une autre table, vous devrez exécuter l’instruction TRUNCATE sur l’autre table ou exécuter l’instruction DELETE si vous avez ajouté des lignes depuis l’exécution du TRUNCATE ... CASCADE. Le problème original est résolu dans cette version, mais vous devrez effectuer cette étape pour assurer que toutes vos données soient cohérentes.

Pour plus de détails, veuillez consulter les notes de versions.

Liens


DALIBO

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