Une colonne d'identité est une colonne spéciale qui est générée automatiquement à partir d'une séquence implicite. Elle peut être utilisée pour générer des valeurs de clé.
   Pour créer une colonne d'identité, utilisez la clause GENERATED ...
   AS IDENTITY de la commande CREATE TABLE, par
   exemple :
CREATE TABLE people (
    id bigint GENERATED ALWAYS AS IDENTITY,
    ...,
);
ou sinon :
CREATE TABLE people (
    id bigint GENERATED BY DEFAULT AS IDENTITY,
    ...,
);
Voir CREATE TABLE pour plus de détails.
   Si une commande INSERT est exécutée sur la table contenant
   une colonne d'identité et qu'aucune valeur n'est explicitement indiquée pour
   la colonne d'identité, alors une valeur générée par la séquence implicite est
   insérée. Par exemple, avec les définitions ci-dessus et en supposant les
   colonnes appropriées supplémentaires, écrire
INSERT INTO people (name, address) VALUES ('A', 'foo');
INSERT INTO people (name, address) VALUES ('B', 'bar');
   génèrera des valeurs pour la colonne id en commençant par
   la valeur 1 et résultera en les données suivantes pour la table :
id | name | address ----+------+--------- 1 | A | foo 2 | B | bar
   Il est aussi possible d'indiquer le mot clé DEFAULT à la
   place d'une valeur pour demander explicitement une valeur générée par la
   séquence, par exemple :
INSERT INTO people (id, name, address) VALUES (DEFAULT, 'C', 'baz');
   De façon similaire, le mot clé DEFAULT peut être utilisé
   dans les commandes UPDATE.
  
De ce fait, en de nombreuses façons, une colonne d'identité se comporte comme une colonne avec une valeur par défaut.
   Les clauses ALWAYS et BY DEFAULT dans
   la définition de la colonne déterminent comment sont gérées les valeurs
   explicitement définies par l'utilisateur dans des commandes
   INSERT et UPDATE. Dans une commande
   INSERT, si ALWAYS est indiqué, une
   valeur indiqué par l'utilisateur est uniquement acceptée si la commande
   INSERT indique OVERRIDING SYSTEM VALUE.
   Si BY DEFAULT est sélectionné, alors la valeur indiquée
   par l'utilisateur fait priorité. Donc, utiliser BY DEFAULT
   revient à un comportement similaire aux valeurs par défaut, où la valeur par
   défat peut être surchargée par une valeur explicite, alors que
   ALWAYS fournit plus de protection contre l'insertion
   accidentelle d'une valeur explicite.
  
Le type de données d'une colonne identité doit être un type de données accepté par les séquences. (Voir CREATE SEQUENCE.) Les propriétés de la séquence associée peuvent être indiquées lors de la création d'une colonne d'identité (voir CREATE TABLE) ou modifiées après coup (voir ALTER TABLE).
   Une colonne d'identité est automatiquement marquée comme NOT
   NULL. Néanmoins, une colonne d'identité ne garantie par l'unicité.
   (Une séquence renvoie normalement des valeurs uniques mais une séquence peut
   être réinitialisée ou des valeurs peuvent être insérées manuellement dans
   la colonne d'identité, comme discuté ci-dessus.) L'unicité doit être forcée
   en utilisant une contrainte de type PRIMARY KEY ou
   UNIQUE.
  
   Dans les hiérarchies d'héritages, les colonnes d'identité et leurs propriétés
   sont indépendantes de celles des tables parents. Une table enfant ne peut
   pas hériter des colonnes d'identité ou de leurs propriétés automatiquement du
   parent. Lors d'une commande INSERT ou
   UPDATE, une colonne est traitée comme une colonne
   d'identité si cette colonne est une colonne d'identité dans la table nommée
   dans la commande. Dans ce cas, les propriétés de la colonne correspondante
   sont appliquées.
  
Les partitions héritent des colonnes d'identité de la table partitionnée. Elles ne peuvent pas avoir leurs propres colonnes d'identité. Les propriétés d'une colonne d'identité donnée sont cohérentes sur toutes les partitions d'une hiérarchie de partitions.