PostgreSQL 18 est disponible, la dernière version de la base de données open source apporte un sous-système d'entrée/sortie asynchrone, des améliorations de performances et la prise en charge d'OAuth

PostgreSQL 18 est disponible, introduisant un sous-système d'entrée/sortie (E/S) asynchrone qui améliore les performances dans des opérations clés telles que les analyses séquentielles et bitmap heap ainsi que les processus de nettoyage, avec des benchmarks montrant des gains de vitesse pouvant atteindre trois fois plus. Cette version apporte également la conservation des statistiques du planificateur lors des mises à niveau majeures, des améliorations de pg_upgrade, des capacités de « skip scan » aux index B-tree multicolonnes, l'authentification OAuth 2.0 intégrée et de nombreuses autres améliorations.

PostgreSQL, également connu sous le nom de Postgres, est un système de gestion de base de données relationnelle (SGBDR) libre et open source qui met l'accent sur l'extensibilité et la conformité SQL. PostgreSQL offre des transactions avec des propriétés d'atomicité, de cohérence, d'isolation et de durabilité (ACID), des vues automatiquement actualisables, des vues matérialisées, des déclencheurs, des clés étrangères et des procédures stockées. PostgreSQL est pris en charge par tous les principaux systèmes d'exploitation, notamment Windows, Linux, macOS, FreeBSD et OpenBSD, et gère toute une gamme de charges de travail, des machines individuelles aux entrepôts de données, en passant par les lacs de données ou les services web avec de nombreux utilisateurs simultanés.


PostgreSQL 18 : les principales nouveautés en bref

PostgreSQL 18 vient de sortir en tant que nouvelle version de cette base de données relationnelle objet open source. Cette version introduit un sous-système d'entrée/sortie (E/S) asynchrone qui améliore les performances pour les opérations clés, notamment les analyses séquentielles et bitmap heap, ainsi que les processus de nettoyage. Les tests de performance démontrent des performances jusqu'à trois fois plus rapides dans certains scénarios.

Suite à ces modifications fondamentales du moteur, PostgreSQL 18 peut désormais conserver les statistiques du planificateur lors des mises à niveau majeures, ce qui permet aux clusters de retrouver plus rapidement les niveaux de performances attendus après une mise à jour. L'utilitaire pg_upgrade a bénéficié de plusieurs améliorations, ce qui réduit les temps de mise à niveau, en particulier pour les bases de données comportant de nombreuses tables et séquences.

PostgreSQL 18 ajoute également des capacités de « skip scan » aux index B-tree multicolonnes, ce qui permet à davantage de requêtes de tirer parti des index et de bénéficier d'une exécution plus rapide lorsque les colonnes préfixées ne présentent pas de conditions d'égalité ou lorsque certaines combinaisons OR sont utilisées dans les clauses WHERE.

S'appuyant sur les progrès réalisés en matière de gestion des données, cette version fait des colonnes virtuelles générées la valeur par défaut, calcule leurs valeurs au moment de la requête et permet la réplication logique des colonnes générées stockées. De plus, les développeurs peuvent désormais accéder aux valeurs des lignes précédentes et nouvelles à l'aide des clauses RETURNING pour les instructions INSERT, UPDATE, DELETE et MERGE.

Parmi les autres modifications, on peut citer la prise en charge de la génération uuidv7() ordonnée par horodatage, un traitement de texte plus simple et plus rapide, l'authentification OAuth 2.0 intégrée, l'amélioration de la journalisation des conflits de réplication logique, une stratégie de nettoyage proactive et l'activation par défaut des sommes de contrôle des pages pour les nouvelles bases de données. Bien évidemment, plusieurs autres améliorations sont également incluses dans cette version.

Présentation du sous-système d'E/S asynchrone

PostgreSQL s'appuyait auparavant sur les mécanismes de prélecture du système d'exploitation pour accélérer la récupération des données. Cependant, comme les systèmes d'exploitation ne disposent pas d'informations sur les modèles d'accès spécifiques aux bases de données, ils ne peuvent pas toujours anticiper les données qui seront nécessaires, ce qui entraîne des performances sous-optimales dans de nombreuses charges de travail.

PostgreSQL 18 introduit un nouveau sous-système d'E/S asynchrones (AIO) conçu pour pallier cette limitation. L'AIO permet à PostgreSQL d'émettre plusieurs requêtes d'E/S simultanément au lieu d'attendre que chacune d'entre elles se termine dans l'ordre. Cela élargit la lecture anticipée existante et améliore le débit global. Les opérations AIO prises en charge dans PostgreSQL 18 comprennent les analyses séquentielles, les analyses de tas bitmap et le nettoyage. Les tests de performance ont démontré des gains de performance pouvant atteindre 3 fois dans certains scénarios.

Le nouveau paramètre io_method vous permet de basculer entre les méthodes AIO, notamment worker et io_uring, ou vous pouvez choisir de conserver le comportement actuel de PostgreSQL avec le paramètre sync.

Mises à niveau plus rapides, meilleures performances après la mise à niveau

Une fonctionnalité clé de PostgreSQL est la génération et le stockage de statistiques qui aident PostgreSQL à sélectionner le plan de requête le plus efficace. Avant PostgreSQL 18, ces statistiques n'étaient pas conservées lors d'une mise à niveau majeure, ce qui pouvait entraîner une dégradation significative des performances des requêtes sur les systèmes très sollicités jusqu'à la fin de l'exécution de ANALYZE. PostgreSQL 18 introduit la possibilité de conserver les statistiques du planificateur lors d'une mise à niveau majeure, ce qui aide un cluster mis à niveau à atteindre plus rapidement les performances attendues après la mise à niveau.

De plus, pg_upgrade, un utilitaire qui effectue les mises à niveau majeures, comprend plusieurs améliorations dans PostgreSQL 18, telles que des mises à niveau plus rapides lorsqu'une base de données contient de nombreux objets comme des tables et des séquences. Cette version permet également à pg_upgrade de traiter ses vérifications en parallèle en fonction des paramètres du drapeau --jobs, et ajoute le drapeau --swap qui permute les répertoires de mise à niveau au lieu de copier, cloner ou lier des fichiers.

Améliorations des performances générales et des requêtes

PostgreSQL 18 accélère encore davantage les performances des requêtes grâce à des fonctionnalités qui accélèrent automatiquement les charges de travail. Cette version introduit les recherches « skip scan » sur les index B-tree multicolonnes, qui améliorent le temps d'exécution des requêtes omettant une condition = sur une ou plusieurs colonnes d'index préfixées. Elle permet également d'optimiser les requêtes utilisant des conditions OR dans un WHERE afin d'utiliser un index, ce qui accélère considérablement l'exécution. De nombreuses améliorations ont également été apportées à la manière dont PostgreSQL planifie et exécute les jointures de tables, depuis l'amélioration des performances des jointures par hachage jusqu'à la possibilité d'utiliser des tris incrémentiels pour les jointures par fusion. PostgreSQL 18 prend également en charge les constructions parallèles pour les index GIN, en joignant les index B-tree et BRIN pour prendre en charge cette fonctionnalité.

Cette version s'appuie également sur la prise en charge par PostgreSQL de l'accélération matérielle, notamment la prise en charge des intrinsèques ARM NEON et SVE CPU pour la fonction popcount, qui est utilisée par bit_count et d'autres fonctionnalités internes.

Amélioration de l'expérience développeur

PostgreSQL 18 introduit des colonnes virtuelles générées qui calculent les valeurs au moment de la requête au lieu de les stocker. Il s'agit désormais de l'option par défaut pour les colonnes générées. De plus, les colonnes générées stockées peuvent désormais être répliquées logiquement.

Cette version ajoute la possibilité d'accéder à la fois aux valeurs précédentes (OLD) et actuelles (NEW) dans la clause RETURNING pour les commandes INSERT, UPDATE, DELETE et MERGE. PostgreSQL 18 ajoute également la génération UUIDv7 via la fonction uuidv7(), qui vous permet de générer des UUID aléatoires classés par horodatage afin de prendre en charge de meilleures stratégies de mise en cache. PostgreSQL 18 inclut uuidv4() comme alias pour gen_random_uuid().

PostgreSQL 18 ajoute des contraintes temporelles (contraintes sur les plages) pour les contraintes PRIMARY KEY et UNIQUE à l'aide de la clause WITHOUT OVERLAPS, et pour les contraintes FOREIGN KEY à l'aide de la clause PERIOD.

Enfin, PostgreSQL 18 facilite la création de la définition de schéma d'une table étrangère à l'aide de la définition d'une table locale avec la commande CREATE FOREIGN TABLE ... LIKE.

Traitement du texte amélioré

PostgreSQL 18 facilite et accélère le traitement du texte grâce à plusieurs nouvelles améliorations. Cette version ajoute le classement PG_UNICODE_FAST, qui fournit une sémantique Unicode complète pour les transformations de cas tout en contribuant à accélérer de nombreuses comparaisons. Cela inclut les fonctions de comparaison de chaînes upper et lower et la nouvelle fonction casefold pour les comparaisons insensibles à la casse.

De plus, PostgreSQL 18 prend désormais en charge les comparaisons LIKE sur du texte utilisant un classement non déterministe, ce qui simplifie la manière dont vous pouvez effectuer des correspondances de motifs plus complexes.

Cette version modifie également la recherche en texte intégral afin d'utiliser le fournisseur de classement par défaut d'un cluster au lieu de toujours utiliser libc, ce qui peut vous obliger à réindexer toutes les recherches en texte intégral et les index pg_trgm après avoir exécuté pg_upgrade.

Fonctionnalités d'authentification et de sécurité

PostgreSQL 18 introduit l'authentification OAuth, qui permet aux utilisateurs de s'authentifier à l'aide des mécanismes OAuth 2.0 pris en charge par les extensions PostgreSQL. De plus, PostgreSQL 18 inclut la validation pour le mode FIPS et ajoute le paramètre ssl_tls13_ciphers pour configurer les suites de chiffrement TLS v1.3 côté serveur.

Cette version déprécie l'authentification par mot de passe md5, qui sera supprimée dans une prochaine version. Si vous avez besoin d'une authentification par mot de passe PostgreSQL, utilisez l'authentification SCRAM. PostgreSQL 18 prend également en charge l'authentification SCRAM passthrough avec postgres_fdw et dblink pour l'authentification auprès d'instances PostgreSQL distantes. De plus, pgcrypto prend désormais en charge le chiffrement SHA-2 pour le hachage des mots de passe.

Réplication

PostgreSQL 18 prend en charge le signalement des conflits d'écriture de réplication logique dans les journaux et dans la vue pg_stat_subscription_stats. De plus, CREATE SUBSCRIPTION utilise désormais par défaut le streaming parallèle pour appliquer les transactions, ce qui peut contribuer à améliorer les performances.

L'utilitaire pg_createsubscriber dispose désormais d'un indicateur --all qui vous permet de créer des répliques logiques pour toutes les bases de données d'une instance à l'aide d'une seule commande. PostgreSQL 18 vous permet également de supprimer automatiquement les emplacements de réplication inactifs afin d'éviter de stocker trop de fichiers journaux d'écriture anticipée sur un éditeur.

Maintenance et observabilité

PostgreSQL 18 améliore sa stratégie de nettoyage en gelant de manière proactive davantage de pages lors des nettoyages réguliers, ce qui réduit la charge et facilite les situations nécessitant des nettoyages agressifs.

PostgreSQL 18 ajoute plus de détails à EXPLAIN, qui fournit des informations sur l'exécution du plan de requête, et à partir de cette version, affiche désormais automatiquement le nombre de tampons (l'unité fondamentale de stockage des données) auxquels on accède lors de l'exécution de EXPLAIN ANALYZE. De plus, EXPLAIN ANALYZE affiche désormais le nombre de recherches d'index effectuées lors d'un balayage d'index, et EXPLAIN ANALYZE VERBOSE inclut des statistiques sur le CPU, le WAL et la lecture moyenne.

PostgreSQL 18 inclut davantage d'informations dans pg_stat_all_tables sur le temps passé sur le vacuum et les opérations associées, ainsi que des statistiques par connexion sur l'utilisation des E/S et du WAL.

Autres changements notables

Les bases de données initialisées avec PostgreSQL 18 initdb ont désormais les sommes de contrôle de page activées par défaut. Cela peut affecter les mises à niveau à partir de clusters sans somme de contrôle, ce qui vous obligerait à créer un nouveau cluster PostgreSQL 18 avec l'option --no-data-checksums lors de l'utilisation de pg_upgrade.

PostgreSQL 18 introduit également une nouvelle version (3.2) du protocole filaire PostgreSQL, la première nouvelle version du protocole depuis PostgreSQL 7.4 (2003). libpq utilise toujours la version 3.0 par défaut, tandis que les clients (par exemple, les pilotes, les poolers, les proxys) ajoutent la prise en charge de la nouvelle version du protocole.

Télécharger PostgreSQL 18

Source : PostgreSQL

Et vous ?

Quel est votre avis sur le sujet ?
Que pensez-vous des améliorations apportées par cette version de PostgreSQL, les trouvez-vous utiles et intéressantes ?

Voir aussi :

PostgreSQL 17 est disponible avec une nouvelle structure de mémoire interne et des améliorations de performance

PostgreSQL 16 est disponible, la dernière version de la base de données open source apporte des améliorations au parallélisme des requêtes et à la réplication logique

PostgreSQL 15 est disponible, elle améliore de l'ordre de 25 % à 400 % ses algorithmes de tri en mémoire et sur disque, et apporte la populaire commande MERGE