Colonne d’identité
Qu’est-ce qu’une colonne d’identité dans PostgreSQL ?
Une colonne d’identité reçoit automatiquement ses valeurs d’une séquence implicite. C’est la manière conforme au standard SQL de créer une clé auto-incrémentée dans PostgreSQL.
Une colonne d’identité est déclarée avec GENERATED ALWAYS AS IDENTITY ou GENERATED BY DEFAULT AS IDENTITY. PostgreSQL lui associe une séquence implicite et remplit la colonne à partir de cette séquence chaque fois qu’une insertion ne fournit pas de valeur.
Avec GENERATED ALWAYS, une valeur explicite dans un INSERT est rejetée, sauf si l’instruction indique OVERRIDING SYSTEM VALUE ; avec BY DEFAULT, une valeur explicite est prioritaire. Les colonnes d’identité suivent le standard SQL, tandis que serial est un raccourci plus ancien propre à PostgreSQL. Comme pour toute séquence, les numéros consommés par une transaction annulée ne sont pas réutilisés : les trous sont donc normaux.
Exemple
L’exemple insère deux lignes sans id, renvoie les valeurs générées et affiche le nom de la séquence associée à la colonne.
CREATE TABLE tickets (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
subject text NOT NULL
);
INSERT INTO tickets (subject) VALUES ('first'), ('second') RETURNING id;
SELECT pg_get_serial_sequence('tickets', 'id');Du SQL simple pour PostgreSQL 16 ou 17 standard, sans aucune extension. Exécutez-le dans une base de données vide que vous pouvez jeter ensuite.
Références
Documentation officielle de PostgreSQL (en anglais).