PostgreSQL 18 : accélération matérielle, requêtes plus performantes, SSO simplifié
ven, 26/09/2025 - 11:20
La version 18 de PostgreSQL est disponible depuis le 25 september ! C'est une des bases de données open source les plus utilisées. Cette version introduit un nouveau système /O pour booster les performances, des améliorations notables, selon le projet, sur les workloads de taille taille. Il s'agit d'une version majeure mais l'objectif est minimiser la casse de migration, de production.

Pour les développeurs, cette version propose : uuidv7() pour une meilleure indexation et une meilleure vélocité en lecture des UUID, support OAuth 2 et un SSO simplifié. La partie requête a été retravaillée en introduit le concept de skip scan sur les index multi-colonne B-tree. L'idée est d'omettre une condition =. Autre amélioration : une meilleure accélération matérielle en supportant ARM NEON et les intrinsics SVE des CPU. Autre nouveauté important, une évolution des virtual generated columns. "Une colonne générée est une colonne spéciale, toujours calculée à partir d'autres colonnes. Elle est donc aux colonnes ce qu'une vue est aux tables. Il y a deux types de colonnes générées : stockée et virtuelle. Une colonne générée stockée est calculée quand elle est écrite (insérée ou mise à jour) et occupe de l'espace de stockage comme si elle était une colonne normale. Une colonne virtuelle générée n'occupe pas d'espace et est calculée à la lecture. Une colonne générée virtuelle est donc équivalente à une vue, et une colonne générée stockée est équivalente à une vue matérialisée (sauf qu'elle sera toujours mise à jour automatiquement). PostgreSQL n'implémente actuellement que les colonnes générées stockées." dixit la documentation.
Cette fonctionnalité était déjà présente. Avec la v18, la colonne virtuelle générée peut calculer les valeurs au moment de la requête au lieu de les stocker. C'est un fonctionnement par défaut. Et ces colonnes peuvent être répliquée (réplication logique).
Des mises à jour plus rapides, de meilleures performances post-mises à jour
Une des fonctionnalités clé de PostgreSQL est la génération et le stockage de statistiques permettant à PostgreSQL de choisir le plan de requêtage le plus efficace. Avant PostgreSQL 18, ces statistiques n'étaient pas conservées lors d'une mise à jour majeure de version. Ceci pouvait causer des dégradations de performances sur les systèmes chargés jusqu'à ce que l'exécution d'ANALYZE se termine. PostgreSQL 18 apporte la possibilité de garder les statistiques du planificateur lors d'une mise à jour de version majeure, ce qui permet à une instance d'être plus rapidement performante après l'opération.
De plus, pg_upgrade, outil de mises à jour majeures, inclut plusieurs améliorations dans PostgreSQL 18, telles que des mises à jour plus rapides lorsqu'une base de données contient beaucoup d'objets de type tables ou séquences. Avec cette version, pg_upgrade traite ses vérifications en parallèle en se basant sur le paramètre --jobs et ajoute un autre paramètre --swap qui intervertit les répertoires au lieu de copier, cloner ou lier les fichiers.
Améliorer l'expérience développeur
PostgreSQL 18 introduit les colonnes générées virtuelles dont les valeurs sont calculées à la requête, et non stockées. À partir de cette version, il s'agit du comportement par défaut pour les colonnes générées. De plus, les colonnes générées stockées peuvent maintenant être répliquées logiquement.
Cette version ajoute la possibilité d'accéder à la fois aux valeurs précédentes (OLD) et courantes (NEW) dans la clause RETURNING pour les commandes INSERT, UPDATE, DELETE et MERGE.
PostgreSQL 18 propose également la génération de UUIDv7 au travers de la fonction uuidv7() autorisant l'utilisateur à générer des UUIDs aléatoires ordonnés dans le temps ce qui permet la mise en œuvre de meilleures stratégies de cache. PostgreSQL 18 inclut uuidv4(), un alias pour gen_random_uuid().
PostgreSQL 18 ajoute des contraintes temporelles, -- contraintes sur intervalles -- à la fois pour les contraintes PRIMARY KEY et UNIQUE en utilisant la clause WITHOUT OVERLAPS, et sur les contraintes FOREIGN KEY en utilisant la clause PERIOD.
Enfin, PostgreSQL 18 simplifie la création de tables étrangères en utilisant la définition d'une table locale. Cette opération est réalisée par la commande CREATE FOREIGN TABLE ... LIKE.
PostgreSQL 18 introduit également une nouvelle version (3.2) du protocole natif PostgreSQL. Il s'agit de la première évolution du protocole depuis PostgreSQL 7.4 (2003). libpq utilise toujours la version 3.0 par défaut pour laisser le temps aux clients (par exemple, les pilotes, les poolers et les proxies) d'ajouter le support de la nouvelle version du protocole.
Note de version : https://www.postgresql.org/about/news/postgresql-18-released-3142/

