À partir de documents :
Les types de données smallserial
, serial
et bigserial
ne sont pas de vrais types, mais simplement une commodité de notation pour créer des colonnes d'identifiant unique (similaire à la propriété AUTO_INCREMENT prise en charge par certaines autres bases de données). Dans l'implémentation actuelle, en spécifiant :
CREATE TABLE tablename (
colname SERIAL
);
équivaut à spécifier :
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
Ainsi, nous avons créé une colonne d'entiers et fait en sorte que ses valeurs par défaut soient attribuées à partir d'un générateur de séquence. Une contrainte NOT NULL est appliquée pour s'assurer qu'une valeur nulle ne peut pas être insérée. (Dans la plupart des cas, vous souhaiterez également attacher une contrainte UNIQUE ou PRIMARY KEY pour empêcher l'insertion accidentelle de valeurs en double, mais ce n'est pas automatique.) Enfin, la séquence est marquée comme "appartenant à" la colonne, de sorte qu'elle sera supprimé si la colonne ou la table est supprimée.