LOXODATA

PostgreSQL 17 bêta 1

2024-06-10   1666 mots, 8 minutes de lecture

PostgreSQL 17 Bêta 1 publiée

Le PostgreSQL Global Development Group annonce la disponibilité de la première bêta de PostgreSQL 17 en téléchargement. Cette publication contient un aperçu des fonctionnalités qui seront disponibles dans la version finale de PostgreSQL 17. Des modifications peuvent toutefois intervenir d’ici là.

Vous pouvez trouver des informations sur toutes les fonctionnalités et les changements de PostgreSQL 17 dans les notes de version

Dans l’esprit de la communauté open source PostgreSQL, nous vous encourageons fortement à tester les nouvelles fonctionnalités de PostgreSQL dans vos systèmes de base de données. Ceci afin de nous aider à éliminer les bogues et autres problèmes qui pourraient exister. Bien que nous ne vous conseillions pas de faire fonctionner PostgreSQL 17 Bêta 1 dans vos environnements de production, nous vous encourageons à trouver des moyens de faire fonctionner votre charge applicative typique avec cette publication bêta.

Vos tests et vos commentaires aideront la communauté à s’assurer que PostgreSQL 17 respecte nos standards de stabilité et fiablité. Vous pouvez également vous renseigner sur notre processus de beta testing et comment y contribuer.

Principales fonctionnalités de PostgreSQL 17

Optimisation des performances générales et des requêtes

PostgreSQL 17 s’appuie sur les précédentes publications et continue d’optimiser les performances générales. Le processus VACUUM, qui est responsable de la récupération de l’espace de stockage, possède une nouvelle structure de données qui consomme près de 20 fois moins de mémoire, en plus d’optimisations sur la durée d’éxecution. Exit également la limite mémoire de 1GB (paramétrée par maintenance_work_mem) afin d’allouer plus de ressources aux tâches de maintenance.

Cette publication introduit une interface pour les I/O stream, et peut apporter des gains en performance sur les lectures séquentielles et l’éxecution de ANALYZE. PostgreSQL 17 apporte aussi des paramètres de configuration afin de contrôler la scalabilité des buffers de transaction, subtransaction et multixact.

PostgreSQL 17 peut dorénavant utiliser les statistiques du planificateur et l’ordre de tri des CTE (requêtes WITH) pour optimiser ces requêtes et les rendre plus rapides. De même, cette publication améliore les temps d’éxecution des requêtes utilisant les clauses IN avec un index B-tree. Dorénavant, PostgreSQL peut supprimer les déclarations IS NOT NULL d’une requête sur des colonnes possédant des contraintes NOT NULL, et rend inutile le travail sur les requêtes contenant une clause IS NULL sur une colonne avec la contrainte IS NOT NULL. Cette version apporte également la construction parallèle d’index pour les index BRIN.

Une amélioration apportée à la gestion des verrous posés par les WAL, permet de d’être deux fois plus rapide selon les tests, dans des environnements avec des mises à jour hautement concurrentes.

Enfin, PostgreSQL 17 apporte son lot de nouvelles instructions SIMD plus explicites, incluant le support du jeu d’instructions AVX-512 pour la fonction bit_count.

Améliorations du partitionnement et des systèmes distribués

PostgreSQL 17 apporte plus de flexibilité à la gestion du partitionnement, ajoutant la possibilité de scinder et fusionner des partitions, et ajoute le support des colonnes IDENTITY et des contraintes d’exclusion pour des tables partitionnées. De plus, le module postgres_fdw peut bénéficier de performances accrues sur les requêtes contenant des sous-requêtes EXISTS et IN, qui peuvent dorénavant être délégués au serveur distant.

PostgreSQL 17 ajoute de nouvelles fonctionnalités à la réplication logique qui rend son utilisation plus simple dans les environnements de haute disponibilité et pendant les mises à jour de PostgreSQL. À partir de la version 17, il ne sera plus nécessaire de supprimer les slots de réplication logique lors de l’utilisation de pg_upgrade, afin de s’affranchir d’une resynchronisation des données après une mise à jour majeure. De plus, cette version introduit le contrôle du failover pour la réplication logique, afin de rendre la gestion des bases de données PostgreSQL plus aisée dans des environnements hautement disponibles. PostgreSQL 17 autorise l’utilisation des index Hash (auparavant, seuls les index B-tree étaient utilisables) pour la réplication logique côté souscription, et introduit la commande en ligne pg_createsubscriber pour créer une réplication logique sur un standby depuis une réplication physique.

Expérience développeur

PostgreSQL 17 continue d’implémenter le standard SQL/JSON en ajoutant le support de la fonctionnalité JSON_TABLE qui permet de convertir du JSON vers une table standard de PostgreSQL, des constructeurs SQL/JSON (JSON, JSON_SCALAR, JSON_SERIALIZE), et des fonctions (JSON_EXISTS, JSON_QUERY, JSON_VALUE). Il est à noter que ces fonctionnalités étaient initialement prévues pour la version 15 de PostgreSQL mais ont été retirées pendant la période de beta test pour des questions de design, la raison pour laquelle nous vous demandons de tester les nouvelles fonctionnalités ! De plus, PostgreSQL 17 ajoute des fonctions à son implémentation de jsonpath et la possibilité de convertir des données JSON vers différents types de données.

La commande [MERGE](https://www.postgresql.org/docs/17/sql-merge.html supporte désormais la clause RETURNING, vous permettant de manipuler les lignes modifiées. Il vous est possible de voir quelle section de la commande MERGE a modifié la ligne en utilisant la nouvelle fonction merge_action. PostgreSQL 17 vous laisse également mettre à jour des vues avec la commande MERGE, et ajoute une clause WHEN NOT MATCHED BY SOURCE pour gérer les cas où une ligne d’origine ne remplit pas les conditions.

La commande COPY est utilisée pour charger par lot et exporter les données depuis PostgreSQL, et maintenant avec PostgreSQL 17 l’export de grandes lignes peut être jusqu’à deux fois plus rapide. Aussi, la commande COPY a été améliorée lorsque l’encodage source correspond à l’encodage de destination. Une nouvelle option, ON_ERROR, qui permet de continuer la copie lors de la survenue d’une erreur de conversion à l’insertion d’une ligne. PostgreSQL 17 apporte également un meilleur support asynchrone et plus sécurisé aux routines de requêtes d’annulation, que les pilotes peuvent adopter en utilisant l’API libpq mise à jour.

PostgreSQL 17 inclut un fournisseur de collation natif qui fournit un tri sémantique similaire à la collation C, sauf avec l’encodage UTF-8 (une locale C.UTF-8 est fournie également) et SQL_ASCII. Cette nouvelle collation est garantie être immutable, assurant que les valeurs de retour de vos tris ne changent selon le système sur lequel votre installation de PostgreSQL fonctionne.

Sécurité

PostgreSQL 17 ajoute un nouveau paramètre de connexion, sslnegotiation, qui autorise PostgreSQL à effectuer des prises d’échange direct TLS lors de l’utilisation de ALPN, éliminant un échange réseau complet. PostgreSQL est enregistré comme postgresql dans le répertoire ALPN.

Cette publication introduit des déclencheurs d’évènement qui s’éxecute pendant l’authentification, et dans libpq inclut une nouvelle API appelée PQchangePassword qui hash automatiquement les mots de passe côté client afin d’éviter de tracer en clair ces derniers sur le serveur.

PostgreSQL 17 ajoute un nouveau rôle prédéfini nommé pg_maintain qui donne la permission aux utilisateurs d’éxecuter les commandes VACUUM, ANALYZE, CLUSTER, REFRESH MATERIALIZED VIEW, REINDEX et LOCK TABLE sur toutes les relations. Cette version assure aussi que le search_path soit sécurisé pour les opérations de maintenance tel que VACUUM, ANALYZE, CLUSTER, REFRESH MATERIALIZED VIEW et INDEX. Finalement, les utilisateurs peuvent désormais utiliser ALTER SYSTEM pour affecter les valeurs aux variables serveur personnalisées non reconnues.

Sauvegarde et export

PostgreSQL 17 introduit la possibilité d’effectuer des sauvegardes incrémentales en utilisant pg_basebackup, et ajoute un nouvel utilitaire appelé pg_combinebackup utiliser dans le processus de restauration. Cette publication ajoute une nouvelle option à pg_dump nommé --filter, permettant de spécifier dans un fichier les objets à inclure/exclure depuis un dump.

Supervision

La commande EXPLAIN, qui fournit des informations sur les plans de requête et éxecution, ajoute deux nouvelles options : SERIALIZE, qui affiche le temps de conversion des données pour la transmission réseau, et MEMORY, qui reporte la consommation mémoire de l’optimiseur de requête. De plus, EXPLAIN peut afficher maintenant le temps passé à la lecture et écriture de blocs I/O.

PostgreSQL 17 normalise les paramètres pour l’instruction CALL dans pg_stat_statements, réduisant le nombre d’entrées pour les procédures stockées appelées fréquemment. Aussi, le status de progession de VACUUM affiche désormais la progression de vacuum d’index. PostgreSQL 17 introduit une nouvelle vue, pg_wait_events, qui fournit des détails sur les évènements wait et peut être combiné avec pg_stat_activity pour fournir plus de détails sur les sessions actives en attente. Enfin, une partie des informations de la vu pg_stat_bgwriter est désormais scinder dans la nouvelle vue pg_stat_checkpointer.

Fonctionnalités supplémentaires

De nombreuses autres fonctionnalités et améliorations ont été ajoutées à PostgreSQL. En fonction des cas d’usages, leur importance peut paraître plus ou moins grande que celles mentionnées ci-dessus.

Vous pouvez consulter les notes de publications pour une liste complète des nouveautés et changements : https://www.postgresql.org/docs/17/release-17.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 17.

É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 première publication bêta de la version 17. Le projet PostgreSQL publiera autant de bêtas que nécessaires 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 2024.

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

Liens

Conclusion

Comme vous avez pu le constater, on retrouve notamment un effort particulier sur la résilience de la réplication logique avec cette version 17 de PostgreSQL qui résulte de travaux apportés sur les versions précédentes de PostgreSQL, des améliorations de performance, des nouvelles fonctions implémentant le standard SQL/JSON, l’ajout des sauvegardes incrémentales.

Crédits photo : Carlos Gonzalez