PostgreSQL continue de faire cette chose rare dans le logiciel : s’améliorer chaque année sans jamais régresser. La version 18 est une livraison consistante et, fait inhabituel pour une mise à jour de base de données, plusieurs de ses nouveautés phares concernent directement les développeurs d’applications, pas seulement les administrateurs. Un nouveau sous-système d’entrées-sorties asynchrones, un générateur natif d’UUID ordonnés dans le temps, des colonnes générées plus souples et une indexation plus intelligente répondent chacun à des difficultés concrètes du quotidien. Ce guide passe en revue les évolutions qui comptent pour ceux qui écrivent les requêtes, et explique pourquoi elles justifient une mise à niveau.
Les changements que les développeurs vont vraiment ressentir
- Des entrées-sorties asynchrones pour accélérer les lectures sur les charges à dominante de lecture
- La fonction native uuidv7() qui produit des UUID ordonnés dans le temps et bien adaptés aux index
- Des colonnes générées virtuelles calculées à la lecture
- Le skip scan, qui permet à davantage de requêtes d’exploiter les index multicolonnes
- Un chemin de mise à niveau majeure plus fluide
Info
Pourquoi une nouvelle version de base de données mérite votre attention
Les performances applicatives se cachent souvent derrière les performances de la base de données. Des fonctionnalités qui accélèrent les lectures, améliorent l’indexation des clés et étendent l’utilisation des index se traduisent directement par des applications plus réactives, sans avoir à réécrire le code applicatif. Vérifiez toujours les détails dans les notes de version officielles de PostgreSQL 18 pour votre plateforme.
Entrées-sorties asynchrones : des lectures plus rapides en charge
Historiquement, PostgreSQL émettait les lectures disque une par une et attendait la fin de chacune: un comportement acceptable sur du stockage rapide avec des jeux de travail réduits, mais bien moins quand une requête doit lire de nombreuses pages non mises en cache. La version 18 introduit un sous-système d’entrées-sorties asynchrones qui permet à la base de données d’avoir plusieurs requêtes de lecture en cours simultanément, réduisant ainsi le temps d’attente du stockage. Pour les charges à dominante de lecture, les grands parcours séquentiels et les requêtes analytiques, cela peut améliorer sensiblement le débit, surtout lorsque les données ne tiennent pas toutes en mémoire.
Astuce
Le gain est maximal là où vous étiez limité par les entrées-sorties
Si votre charge de travail tient déjà en RAM, vous remarquerez moins la différence. Les gains les plus importants concernent les grandes tables, les parcours séquentiels ou par bitmap volumineux, et les requêtes qui auparavant restaient bloquées en attente du disque. Comme toujours, mesurez sur vos propres données plutôt que de supposer.
uuidv7() : la bonne façon d’utiliser des clés UUID
Les développeurs adorent les UUID comme clés primaires : uniques globalement, générables côté client, sans séquence centrale. Mais les UUID aléatoires traditionnels (v4) ont un fâcheux effet de bord : parce qu’ils sont aléatoires, leur insertion disperse les écritures dans l’index, ce qui provoque fragmentation et mauvais comportement du cache à mesure que les tables grossissent. UUIDv7 corrige cela en intégrant un horodatage, de sorte que les valeurs sont ordonnées dans le temps : les nouvelles lignes se regroupent dans l’index comme le feraient des entiers auto-incrémentés, tout en conservant l’unicité des UUID. PostgreSQL 18 ajoute une fonction nativeuuidv7() , vous n’avez donc plus besoin d’une extension ou d’une bibliothèque côté client pour en obtenir.
-- Time-ordered UUID keys, built in — unique AND index-friendly.
CREATE TABLE orders (
id uuid PRIMARY KEY DEFAULT uuidv7(),
customer_id bigint NOT NULL,
created_at timestamptz NOT NULL DEFAULT now()
);
-- New rows cluster at the "end" of the index like serial ids,
-- avoiding the write scattering that random uuidv4 causes.
Conseil de pro
Si vous choisissez des clés primaires UUID pour une nouvelle table sous PostgreSQL 18, préférez uuidv7() au v4 aléatoire. Vous conservez tous les avantages des UUID tout en évitant la fragmentation d’index et le ralentissement des insertions que les UUID aléatoires infligent aux grandes tables soumises à de fortes écritures. C’est quasiment un gain gratuit.
Des colonnes générées plus souples
Les colonnes générées permettent à la base de données de calculer automatiquement une colonne à partir d’autres colonnes. Auparavant, PostgreSQL ne prenait en charge que les colonnes générées stockées : la valeur est calculée à l’écriture et sauvegardée sur disque. La version 18 ajoute les colonnes générées virtuelles, calculées à la volée lors de la lecture, de sorte qu’elles ne coûtent aucun stockage et ne se périment jamais. C’est idéal pour les valeurs dérivées que vous souhaitez interroger comme une colonne normale mais sans les persister physiquement.
CREATE TABLE products (
price_cents int NOT NULL,
tax_rate numeric NOT NULL,
-- computed on read: no storage, always current with its inputs
total_cents int GENERATED ALWAYS AS
(price_cents + round(price_cents * tax_rate)) VIRTUAL
);
✓ Avantages
- Colonnes virtuelles : valeurs dérivées sans coût de stockage
- Interrogez les valeurs calculées comme des colonnes ordinaires, pour un code applicatif plus propre
- Les colonnes stockées restent disponibles quand vous voulez des valeurs précalculées
- La logique réside dans le schéma, pas dispersée dans chaque requête
✕ Inconvénients
- Les valeurs virtuelles sont recalculées à chaque lecture : pesez le coût en lecture par rapport au coût en écriture
- Les expressions complexes déplacent du travail vers la base de données ; profilez-les
- Le comportement et les valeurs par défaut diffèrent des colonnes stockées : lisez la documentation
- Ne remplace pas une indexation appropriée des valeurs fréquemment filtrées
Skip scan : davantage de requêtes utilisent vos index
Un piège classique : vous avez un index multicolonne sur (a, b), mais une requête filtre uniquement sur b. PostgreSQL ne peut alors pas utiliser l’index efficacement et bascule sur un parcours plus lent. La version 18 améliore cela avec le skip scan, qui permet au planificateur d’exploiter un tel index même lorsque la colonne de tête n’est pas contrainte, en « sautant » efficacement à travers ses valeurs distinctes. Concrètement, davantage de vos requêtes existantes peuvent s’appuyer sur les index que vous possédez déjà, sans que vous ayez à en ajouter de nouveaux.
Attention
Utile, mais pas une raison d’arrêter de réfléchir aux index
Le skip scan élargit les cas où les index multicolonnes existants s’appliquent: un vrai gain: mais il ne rend pas la conception d’index superflue. Concevoir les index en fonction de vos véritables schémas de requêtes reste essentiel. Considérez le skip scan comme un filet de sécurité qui couvre davantage de cas, pas comme un substitut à la compréhension de vos patterns d’accès.
Un chemin de mise à niveau plus fluide
Les mises à niveau majeures de PostgreSQL ont longtemps eu un coût caché : après la mise à niveau, les statistiques du planificateur de requêtes de la base de données n'étaient pas conservées, de sorte que le système fraîchement mis à niveau pouvait fonctionner avec des plans médiocres jusqu'à ce que ces statistiques soient reconstruites, provoquant parfois une baisse de performance désagréable au pire moment. La version 18 améliore ce point pour que les mises à niveau risquent moins de vous laisser avec une base temporairement ralentie, réduisant ainsi le risque et le stress liés au passage à une version majeure.
sont là où la plupart des applications ressentent la base de données — et la version 18 les cible fortement
Faut-il passer à la version 18 ?
Nouveaux projets
Démarrez avec la version 18. Vous bénéficiez dès le premier jour de uuidv7(), des E/S asynchrones et des colonnes générées virtuelles, sans coût de migration.
Applications gourmandes en lecture ou limitées par les E/S
Les améliorations des E/S asynchrones peuvent à elles seules justifier le passage : mesurez vos charges réelles pour quantifier le gain.
Applications avec beaucoup d'écritures utilisant des clés UUID
Migrer les nouvelles tables vers uuidv7() peut réduire le gonflement des index et améliorer les performances d'insertion à mesure que vous grandissez.
Toute base de données en production
Testez d'abord sur une copie, vérifiez la compatibilité des extensions avec la version 18 et répétez la mise à niveau : la gestion plus fluide des statistiques aide, mais la prudence reste de mise.
! Erreurs courantes à éviter
-
✕Utiliser des uuidv4 aléatoires comme clés primaires sur de grandes tables.
✓Préférez la fonction intégrée uuidv7() : les valeurs ordonnées dans le temps évitent la fragmentation d'index causée par la version 4.
-
✕Supposer que les E/S asynchrones aident toutes les charges de travail.
✓Les gains concernent les requêtes limitées par la lecture ou les E/S ; si vos données tiennent en RAM, vous remarquerez moins de différence.
-
✕Considérer le skip scan comme une raison d'arrêter de concevoir des index.
✓Il élargit les cas où les index existants s'appliquent, mais la conception d'index basée sur les vrais schémas de requêtes reste importante.
-
✕Mettre à niveau la production sans répétition testée.
✓Testez sur une copie, vérifiez la compatibilité des extensions avec la version 18 et répétez l'opération, même avec la gestion plus fluide des statistiques.
? Foire aux questions
Pourquoi les développeurs devraient-ils s'intéresser à PostgreSQL 18 ? +
Plusieurs fonctionnalités phares atterrissent directement entre les mains des développeurs : des E/S asynchrones pour des lectures plus rapides, des clés uuidv7() intégrées et ordonnées dans le temps, des colonnes générées virtuelles, et le skip scan pour que davantage de requêtes utilisent les index existants.
Qu'est-ce que uuidv7 et pourquoi le préférer à uuidv4 ? +
UUIDv7 intègre un horodatage, de sorte que les valeurs sont ordonnées dans le temps et se regroupent dans l'index comme des identifiants séquentiels, évitant la dispersion des écritures et la fragmentation que provoque l'UUIDv4 aléatoire sur les grandes tables avec beaucoup d'écritures.
Que sont les colonnes générées virtuelles ? +
Des colonnes calculées à la lecture plutôt qu'au stockage — elles ne coûtent aucun espace de stockage et ne se périment jamais, idéales pour les valeurs dérivées que vous voulez interroger comme une colonne normale sans les persister.
Qu'améliorent les E/S asynchrones ? +
Elles permettent à PostgreSQL de garder plusieurs requêtes de lecture en vol au lieu d'attendre chacune, améliorant le débit pour les charges de travail gourmandes en lecture, les grands parcours et les données qui ne tiennent pas en mémoire.
Est-il risqué de passer à la version 18 ? +
Moins qu'avant — des améliorations réduisent la baisse de performance après mise à niveau due aux statistiques manquantes du planificateur. Testez quand même sur une copie, vérifiez la compatibilité des extensions et répétez la mise à niveau.
Succès
Une version vraiment orientée développeurs
PostgreSQL 18 est inhabituelle dans la mesure où une grande partie de sa valeur atterrit directement entre les mains des développeurs : des lectures plus rapides, de meilleures clés UUID, des colonnes dérivées sans stockage et des index qui s'appliquent à davantage de requêtes. Adoptez-la sans hésiter pour les nouveaux projets, planifiez une mise à niveau testée pour les systèmes existants, et appuyez-vous sur uuidv7() et les colonnes virtuelles dès que vous y êtes.
Commentaires
0Aucun commentaire pour l’instant. Soyez la première personne à donner votre avis.