Image de couverture de PostgreSQL 18 : E/S asynchrones, uuidv7, colonnes générées et pourquoi les développeurs devraient s’y intéresser

En un coup d’œil

Temps de lecture

~200 mots/min

Publié

il y a 2 semaines

Jul 27, 2026

Vues

262

Total depuis le début

PostgreSQL 18 : E/S asynchrones, uuidv7, colonnes générées et pourquoi les développeurs devraient s’y intéresser

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
i

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.

Publicité

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.

Lectures

sont là où la plupart des applications ressentent la base de données — et la version 18 les cible fortement

Publicité

Faut-il passer à la version 18 ?

1

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.

2

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.

3

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.

4

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.

Bishrul Haq

Written by

Bishrul Haq

Software engineer writing practical tutorials on Laravel, PHP, Python, and the tools behind real projects. More about me

Newsletter

Want more posts like this?

Get practical software notes and tutorials delivered when something new is published.

Pas de spam. Désinscription à tout moment.

Qu’en avez-vous pensé ?

Commentaires

0
Se connecter ou Créer un compte pour participer à la discussion et réagir à cet article.

Aucun commentaire pour l’instant. Soyez la première personne à donner votre avis.

Related posts

Algorithmes de tri essentiels pour les étudiants en informatique

Les algorithmes sont couramment enseignés dans les cursus d'informatique et de génie logiciel, en licence ou en master. Certains les trouvent difficiles à comprendre parce qu'ils les apprennent par cœur.

il y a 6 ans

GraphQL dans Laravel avec Lighthouse

Dans le développement web moderne, GraphQL s’est imposé comme une alternative puissante aux API REST grâce à sa flexibilité et son efficacité.

il y a 1 an

Construire des interfaces réactives modernes avec Laravel 12 et Livewire 4 : guide de mise en production

Un parcours complet de Livewire 4 dans Laravel 12, pensé pour la production : objets formulaire, composants paresseux, interopérabilité avec Alpine, téléversement de fichiers, tests Pest et les pièges de déploiement que personne ne mentionne.

il y a 2 mois

Créer des panneaux d'administration robustes avec Laravel 12 et Filament v5 : guide de mise en production

Livrez un véritable panneau d'administration Filament v5 sur Laravel 12 : ressources, RBAC avec Spatie, multi-location, widgets personnalisés et une checklist de déploiement pour les équipes qui dépassent le stade du hello-world.

il y a 2 mois

Optimiser Laravel 12 avec Octane et FrankenPHP : guide de performance en production

Réduisez la latence de Laravel 12 de plus de moitié avec Octane et FrankenPHP: installation, configuration, audit des singletons et benchmarks, avec les pièges de production qui frappent les équipes dès la deuxième semaine.

il y a 2 mois