uuidv7()

PostgreSQL 🟡 Mid

Définition

Fonction native ajoutée en PostgreSQL 18 (25 septembre 2025) qui génère des UUID version 7 : contrairement a UUIDv4 (aléatoire), les premiers bits d'un UUIDv7 encodent un timestamp, ce qui les rend triables chronologiquement et limite la fragmentation des index B-tree observée avec UUIDv4.

Analogie

Comme numéroter des tickets dans l'ordre d'arrivée (uuidv7) plutôt que de tirer un numéro au hasard dans un sac (uuidv4) : le tri redevient naturel.

Exemple de code

CREATE TABLE events (
  id uuid PRIMARY KEY DEFAULT uuidv7(),
  payload jsonb
);
-- Les id inseres restent ordonnes
-- chronologiquement dans l'index

Cas d'usage

Remplacer un UUIDv4 comme clé primaire quand l'ordre d'insertion doit rester exploitable, sans revenir a un SERIAL prévisible.

Anti-pattern

Garder uuidv4() par défaut sur une table a très fort volume d'écriture alors que la fragmentation d'index dégrade les performances.

Termes liés

#sgbd#interview#database#postgresql#pg18

En entretien

  1. Explique-moi uuidv7() et pourquoi PostgreSQL 18 l'a ajoutée.

    Contrairement à UUIDv4 qui est aléatoire, un UUIDv7 encode un timestamp dans ses premiers bits, ce qui le rend triable chronologiquement et limite la fragmentation des index B-tree observée avec UUIDv4. C'est utile en clé primaire quand l'ordre d'insertion doit rester exploitable.

  2. Quand faut-il remplacer uuidv4() par uuidv7() ?

    Sur une table à très fort volume d'écriture où la fragmentation d'index dégrade les performances, sans pour autant revenir à un SERIAL prévisible et énumérable. C'est un compromis entre l'aléatoire d'UUIDv4 et le tri naturel d'un SERIAL.

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre