LOXODATA

PostgreSQL 13 en bêta 3 et autres mises à jour

2020-08-13   1440 mots, 7 minutes de lecture

Mise à jour cumulative

Le PostgreSQL Global Development Group publie une mise à jour de l’ensemble des versions supportées, ce qui inclut les versions 12.4, 11.9, 10.14, 9.6.19 et 9.5.23.

Cette publication concerne également la troisième bêta de la version 13.

Cette mise à jour résout 2 failles de sécurité et corrige plus de 50 bogues rapportés sur le dernier trimestre.

Il est chaudement recommandé de planifier la mise à jour de vos serveurs au plus tôt.

Problème de sécurité

CVE-2020-14349 : Chemin de recherche incontrôlé dans la réplication logique

Versions concernées : 10 - 12

le paramètre search_path définit les schémas parcourus dans la recherche des tables, fonctions, opérateurs… Le correctif CVE-2018-1058 a permis de corriger le search_path de la plupart des applications client fournies par PostgreSQL, mais la réplication logique n’a pas bénéficié de cette modification. Les utilisateurs de bases publicatrices ou souscriptrices peuvent créer des objets dans le schéma public et leur imposer l’exécution de fonctions SQL arbitraires sous l’identité de la réplication, souvent un superuser. Les installations qui utilisent un modèle d’utilisation de schéma sécurisé (ou secure schema usage pattern) sont protégées.

Le projet PostgreSQL remercie Noah Misch d’avoir soulevé le problème.

CVE-2020-14350 : Chemin de recherche incontrôlé dans CREATE EXTENSION

Versions concernées : 9.5 - 12 (L’équipe de sécurité ne teste pas les versions non supportées, mais ce problème peut être plus ancien.)

Lorsqu’un superuser lance certaines requêtes CREATE EXTENSION, des utilisateurs peuvent exécuter des fonctions SQL arbitraires sous l’identité du superuser. L’attaquant doit avoir le privilège de création d’objets dans le schéma de l’extension. Cela ne concerne pas toutes les extensions.

Non seulement le PGDG a corrigé les extensions fournies avec PostgreSQL, mais il a également rédigé un guide pour les auteurs d’extension tiers.

Le projet PostgreSQL remercie Andres Freund d’avoir soulevé le problème.

À propos de la fin de vie de PostgreSQL 9.5

PostgreSQL 9.5 ne bénéficiera plus de mises à jour à compter du 11 février 2021.

Si vous avez encore des instances de la branche 9.5 en production, nous vous suggérons de planifier une migration vers une version plus récente.

Vous pouvez prendre connaissance de la politique de version pour plus d’informations :

https://www.postgresql.org/support/versioning

Corrections des bogues et améliorations

Cette mise à jour corrige plus de 50 bogues ayant été rapportés ces derniers mois. Certains d’entre eux n’affectent que la version 12, d’autres peuvent affecter toutes les versions supportées.

Ces corrections incluent :

  • des cas limites dans la suppression de partitions impliquant une clé de partition à colonnes multiples en l’absence de clause WHERE ou avec une clause WHERE multiple ;
  • la planification de requêtes et leur exécution en présence de partitions ;
  • déterminer quand déclencher un trigger UPDATE sur une colonne spécifique sur un souscripteur de réplication logique ;
  • pg_replication_slot_advance() actualise désormais les plus anciennes valeurs xmin et LSN. L’echec de la mise à jour pouvait empêcher les ressources (fichiers WAL, par exemple) d’être nettoyées ;
  • une régression de performance sur ts_headline() ;
  • pg_read_file() et les fonctions liées lisent les fichiers jusqu’au EOF, ce qui corrige les problèmes de compatibilité avec les pipes et autres fichiers virtuels ;
  • l’interdiction des valeurs numériques NaN dans les calculs jsonpath, qui n’existent pas en SQL ou en JSON ;
  • les entrées NaN des fonctions d’agrégats. Cela corrige une modification en PostgreSQL 12 où les valeurs NaN entraînaient les fonctions d’agrégats suivantes à émettre une valeur 0 au lieu de NaN : corr(), covar_pop(), regr_intercept(), regr_r2(), regr_slope(), regr_sxx(), regr_sxy(), regr_syy(), stddev_pop(), and var_pop() ;
  • les valeurs time et timetz supérieures à 24:00:00 sont désormais rejetées ;
  • EXPLAIN, dont un correctif pour présenter l’utilisation des ressources lorsqu’un plan utilise des workers parallèles avec les nœuds « Gather Merge » ;
  • la planification de la revalidation de contrainte lors d’ALTER TABLE qui pouvait aboutir à des erreurs étranges ;
  • REINDEX CONCURRENTLY qui pouvait empêcher les anciennes valeurs d’être incluses dans la sortie du décodage de la réplication logique ;
  • les références LATERAL, qui pouvaient potentiellement causer un crash à l’exécution ;
  • l’utilisation de la collation précisée pour une requête lors de l’estimation des coûts des opérateurs ;
  • les anomalies lors de la vérification de conflits en mode d’isolation de transaction SERIALIZABLE ;
  • le checkpointer ne synchronise pas les fichiers si fsync est à off ;
  • le checksum incohérent de pg_control, ce qui pouvait empêcher de redémarrer le serveur en cas de crash avant l’actualisation suivante de pg_control ;
  • libpq continue d’essayer de lire sur la socket de connexion en cas d’erreur d’écriture pour permettre à la connexion de récupérer le message d’erreur final en provenance du serveur ;
  • pg_dump et pg_basebackup rapportent correctement les erreurs de disque plein;
  • pg_restore, dont un correctif pour la restauration parallèle de tables qui possèdent à la fois des droits de niveau table et de niveau ligne ;
  • pg_upgrade tourne avec vacuum_defer_cleanup_age à 0 ;
  • la façon dont pg_rewind gère les fichiers tout juste supprimés dans le répertoire des données ;
  • l’erreur d’initialisation de l’état local dans contrib/dblink, qui pouvait conduire dblink_close() à produire un COMMIT inattendu côté serveur distant ;
  • contrib/amcheck n’informe plus de pages d’index vides supprimées, puisque c’est normal lors du rejeu de WAL.

Pour la liste complète des changements, on pourra consulter la note de publication :

https://www.postgresql.org/docs/current/release.html

Mise à jour

Toutes les publications de mise à jour de PostgreSQL sont cumulatives. Comme pour les autres publications 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 publication&nbsp ;; il suffit de stopper PostgreSQL et mettre les binaires à jour.

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, veuillez consulter la note de publication :

https://www.postgresql.org/docs/current/release.html

PostgreSQL 13 Bêta 3

À propos

Cette mise à jour marque la troisième bêta de PostgreSQL 13, nous rapprochant encore de la disponibilité de la version finale cet automne.

Dans l’esprit de la communauté open source PostgreSQL, vous êtes invités à tester les nouvelles fonctionnalités sur vos systèmes pour nous aider à supprimer les bogues ou problèmes qui existeraient encore. Bien que nous ne vous encouragions pas à faire tourner une bêta en production, nous vous encourageons à tester vos profils de charge habituels.

Vos tests, et vos retours, aideront la communauté à s’assurer que la version 13 respectent les standards de stabilité et de fiabilité des versions du système de gestion de bases de données relationnels open source le plus avancé.

Notes de version

PostgreSQL 13 Bêta 3 introduit un nouveau paramètre de configuration, hash_mem_multiplier, qui permet de contrôler la quantité de mémoire allouée par agrégation de hachage. Les utilisateurs peuvent ainsi décider si les agrégats doivent utiliser le stockage sur disque ou rester en mémoire, cette dernière étant la seule option avant PostgreSQL 13.

PostgreSQL 13 Bêta 3 supprime également le paramètre de configuration hashagg_avoid_disk_plan, connu préalablement comme enable_hashagg_disk.

Pour la liste des changements inclus dans PostgreSQL 13 Bêta 3, on se reportera à la liste des points ouverts :

https://wiki.postgresql.org/wiki/PostgreSQL_13_Open_Items#resolved_before_13beta3

Installation

Pour passer en PostgreSQL 13 Bêta 3 à partir de la bêta 2, ou de toute autre version plus ancienne, il est obligatoire d’utiliser une stratégie similaire à celle employée pour changer de version majeure (i.e. pg_upgrade ou pg_dump/pg_restore).

Pour plus d’informations, on se reportera à la section de la documentation concernant les montées de version :

https://www.postgresql.org/docs/13/static/upgrading.html

Tests pour le débogage et la compatibilité

La stabilité de chaque publication de PostgreSQL dépend de vous, la communauté. En testant la version à venir avec votre charge et vos outils de tests, vous pourrez nous aider à trouver les bogues et régressions avant la publication de PostgreSQL 13.

Étant donné qu’il s’agit d’une version bêta, des changements mineurs dans le comportement de la base de données, des détails et des APIs sont toujours possibles. Vos retours et tests aideront à déterminer les ajustements finaux des nouvelles fonctionnalités.

La qualité des tests aide à déterminer le moment de la publication finale.

Une liste des problèmes ouverts est publiquement disponible dans le wiki de PostgreSQL. Vous pouvez rapporter des bogues en utilisant le formulaire présent sur le site web de PostgreSQL :

https://www.postgresql.org/account/submitbug/

Planning Bêta

Il s’agit de la troisième publication bêta de la version 13. Le projet PostgreSQL publiera autant de bêtas que nécessaire pour tester. Celles-ci seront suivies par une ou plusieurs publications de versions candidates, jusqu’à la publication de la version finale à la fin de l’année 2020.

Pour plus d’information, veuillez consulter la page Beta Testing :

https://www.postgresql.org/developer/beta/

Liens