Serial / UUID

PostgreSQL 🟢 Junior

Définition

SERIAL est un entier auto-incrémenté (1, 2, 3...). UUID est un identifiant unique universel de 128 bits, généralement génère aléatoirement (UUIDv4). PostgreSQL 18 (25 septembre 2025) ajoute la fonction native uuidv7(), qui encode un timestamp dans les premiers bits pour rester triable chronologiquement et limiter la fragmentation d'index que provoque UUIDv4.

Analogie

SERIAL = numéro de ticket dans une file d'attente. UUID = numéro de passeport, unique dans le monde entier.

Exemple de code

CREATE TABLE orders (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  seq SERIAL
);

Cas d'usage

UUID pour les systèmes distribues ou la sécurité. SERIAL pour la simplicité et la lisibilité.

Anti-pattern

Exposer des ids SERIAL dans les URLs publiques, permettant l'énumération des ressources.
#sgbd#interview#database#postgresql

En entretien

  1. Quelle différence entre SERIAL et UUID comme clé primaire ?

    SERIAL est un entier auto-incrémenté simple et lisible, alors qu'UUID est un identifiant unique de 128 bits, généralement généré aléatoirement, adapté aux systèmes distribués ou à la sécurité. PostgreSQL 18 ajoute la fonction native uuidv7(), qui encode un timestamp pour rester triable chronologiquement.

  2. Quel anti-pattern de sécurité concerne les ids SERIAL ?

    Exposer des ids SERIAL dans les URLs publiques permet l'énumération des ressources, un attaquant peut deviner /produit/124 après avoir vu /produit/123. Un UUID rend cette énumération impraticable.

Fiche mise à jour le 2026-09-27

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