Da documenti :
I tipi di dati smallserial
, serial
e bigserial
non sono veri tipi, ma semplicemente una comodità di notazione per la creazione di colonne identificatore univoche (simile alla proprietà AUTO_INCREMENT supportata da alcuni altri database). Nell'attuale implementazione, specificando:
CREATE TABLE tablename (
colname SERIAL
);
equivale a specificare:
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;
Pertanto, abbiamo creato una colonna intera e disposto che i suoi valori predefiniti vengano assegnati da un generatore di sequenze. Viene applicato un vincolo NOT NULL per garantire che non sia possibile inserire un valore null. (Nella maggior parte dei casi vorresti anche allegare un vincolo UNIQUE o PRIMARY KEY per evitare l'inserimento accidentale di valori duplicati, ma ciò non è automatico.) Infine, la sequenza è contrassegnata come "di proprietà di" la colonna, in modo che verrà eliminato se la colonna o la tabella vengono eliminate.