Après un an de développement, une nouvelle branche stable de la base de données PostgreSQL 17 est publiée. Des mises à jour pour cette nouvelle branche seront publiées pendant cinq ans jusqu'en novembre 2029. La prise en charge de PostgreSQL 12.x, la plus ancienne des branches prises en charge, cessera le 14 novembre.
Les principales nouveautés :
- Lors de l'exécution de l'opération VACUUM (collecte des déchets, nettoyage et emballage de l'espace disque), une nouvelle structure de données est utilisée, consommant jusqu'à 20 fois moins de mémoire. La transition vers cette nouvelle structure a permis d'accélérer l'exécution des opérations VACUUM et de réduire la consommation des ressources partagées.
- L'optimisation des performances d'entrée/sortie se poursuit. Grâce à l'amélioration du code pour le traitement du journal d'écriture différée WAL, la bande passante des opérations d'écriture a pu être doublée dans des systèmes avec un grand nombre de requêtes simultanées. Une nouvelle interface de flux d'entrée/sortie a été proposée, permettant d'accélérer la vitesse de balayage séquentiel des données dans les tables et d'accélérer la mise à jour des statistiques pour le planificateur de requêtes après l'exécution de l'opération ANALYZE.
- Les performances des requêtes utilisant l'expression « IN » ont été améliorées lorsqu'elles utilisent des index basés sur une structure B-tree. La possibilité de construction parallèle d'index BRIN (Block Range Index) a été mise en œuvre. Dans le planificateur de requêtes, les vérifications « NOT NULL » ont été optimisées et le traitement des expressions de table communes (Common Table Expression, CTE) définies par la commande SQL « WITH » a été accéléré. L'utilisation des instructions SIMD pour accélérer certains calculs a été assurée, par exemple, les instructions AVX-512 ont été utilisées pour accélérer la fonction bit_count.
- Le support de nouvelles fonctionnalités pour travailler avec le format JSON, défini dans la norme SQL/JSON, a été implémenté. La fonction JSON-TABLE a été ajoutée pour convertir les données du format JSON en tables PostgreSQL classiques, ainsi que de nouveaux opérateurs jsonpath pour transformer les données JSON en types de données natifs PostgreSQL. De nouvelles fonctions pour créer (JSON, JSON_SCALAR et JSON_SERIALIZE) et interroger (JSON_EXISTS, JSON_QUERY et JSON_VALUE) des données au format JSON ont été proposées.
- Les capacités de la commande SQL « MERGE » ont été étendues, permettant de créer des expressions SQL conditionnelles qui combinent dans une seule instruction les opérations INSERT, UPDATE et DELETE. Le support de l'expression RETURNING a été ajouté, permettant de calculer et de renvoyer des valeurs basées sur les lignes ajoutées, mises à jour ou supprimées. La mise à jour des vues est maintenant supportée.
- Les capacités de chargement et d'exportation de données en mode batch ont été étendues. Dans la commande COPY, la vitesse d'exportation des grandes lignes a été multipliée par deux, le processus de copie a été optimisé lorsque les encodages source et cible coïncident, et une option ON_ERROR a été ajoutée, permettant de continuer l'importation après des erreurs lors de l'insertion des données.
- Pour les tables partitionnées, il est désormais possible d'utiliser des colonnes avec des identifiants uniques et le support de la technique d'optimisation des requêtes « Constraint exclusion » a été ajouté.
- Dans le mécanisme de connexion aux tables externes Foreign Data Wrapper (postgres_fdw), il est maintenant possible de transmettre des sous-requêtes « EXISTS » et « IN ». serveur sous-requêtes «EXISTS» et «IN».
- Un moteur intégré indépendant de la plateforme pour le traitement des propriétés de locale « Collation » a été mis en œuvre, utilisé pour établir des règles de tri et des méthodes de comparaison tenant compte du sens des caractères (par exemple, lors du tri de valeurs numériques, la présence d'un signe négatif et d'un point avant le nombre ainsi que différents types d'écriture sont pris en compte, tandis que lors de la comparaison, la casse des caractères et la présence d'un accent ne sont pas prises en compte). Ce nouveau moteur garantit un comportement uniforme lors du tri des résultats des requêtes, peu importe sur quelle plateforme PostgreSQL est exécuté.
- Dans le mécanisme de réplication logique, qui permet de diffuser sur un autre serveur les modifications apportées à la base de données lors de l'ajout, de la suppression ou de la mise à jour d'enregistrements, le processus de mise à jour du SGBD a été simplifié. Auparavant, lors du passage à une nouvelle version majeure, il était nécessaire de supprimer les slots de réplication logique et de resynchroniser les données, mais maintenant il est possible de se passer de la suppression des slots. Pour les configurations tolérantes aux pannes, une gestion du basculement vers un serveur de secours pour la réplication logique a été mise en place. Une nouvelle utilitaire pg_createsubscriber a été ajoutée pour transformer une réplique physique en une nouvelle réplique logique.
- Une nouvelle option « sslnegotiation » a été ajoutée pour la négociation directe des connexions TLS sécurisées en utilisant l'extension ALPN de TLS.
- Un rôle préétabli pg_maintain a été mis en place, donnant à l'utilisateur le droit d'effectuer des opérations liées à la maintenance de la base de données.
- L'outil pg_basebackup, utilisé pour créer des sauvegardes de bases de données, a ajouté le support des sauvegardes incrémentales. Pour reconstruire une sauvegarde complète à partir d'un ensemble de sauvegardes incrémentales, un nouvel outil pg_combinebackup a été proposé. L'outil pg_dump a ajouté l'option « —filter » pour sélectionner les objets à inclure dans le dump.
- Lors de l'analyse des requêtes à l'aide de la commande SQL « EXPLAIN », un affichage du temps passé à lire et à écrire des blocs locaux en entrée/sortie a été réalisé. Deux nouvelles options « MEMORY » et « SERIALIZE » ont également été ajoutées à la commande « EXPLAIN », permettant de déterminer la taille de la mémoire utilisée et le temps passé à transformer les données pour la transmission sur le réseau.
- Une indication de la progression de l'opération VACUUM avec des index a été mise en place.
- Une vue système pg_wait_events a été ajoutée, qui, associée à la vue pg_stat_activity, permet d'étudier plus en détail les raisons pour lesquelles les sessions actives sont en état d'attente.
Source : opennet.ru
