In vielen Fällen macht es Sinn, Datensätzen eine eindeutige Nummer zuzuweisen. Zu diesem Zwecke bietet PostgreSQL sogenannte Serials. Eine Spalte vom Typ serial verhält sich wie folgt:
test=# CREATE TABLE t_log (id serial, wert text); NOTICE: CREATE TABLE will create implicit sequence "t_log_id_seq" for serial column "t_log.id" CREATE TABLE
Wenn Sie eine Spalte vom Typ serial anlegen, wird PostgreSQL automatisch eine sogenannte Sequenz erzeugen, die dann dafür sorgt, dass die Spalte einen eindeutigen Wert erhält.
Wenn Werte in die Tabelle eingefügt werden, wird eine Spalte automatisch vergeben:
test=# INSERT INTO t_log (wert) VALUES ('datensatz');
INSERT 78323 1
test=# INSERT INTO t_log (wert) VALUES ('datensatz');
INSERT 78324 1
test=# INSERT INTO t_log (wert) VALUES ('datensatz');
INSERT 78325 1
In unserem Fall führt das zum folgenden Ergebnis:
test=# SELECT * FROM t_log; id | wert ----+----------- 1 | datensatz 2 | datensatz 3 | datensatz (3 rows)
Von besonderer Bedeutung ist die Art und Weise in der Serials erzeugt werden:
test=# \d t_log
Table "public.t_log"
Column | Type | Modifiers
--------+---------+-------------------------------------------------------
id | integer | not null default nextval('public.t_log_id_seq'::text)
wert | text |
Durch die Verwendung von sogenannten Sequenzen ist es problemlos möglich, die Art der Wertevergabe zu beeinflussen - durch Modifikation der Sequenz (dazu später) können somit verschiedenste Features realisiert werden.
PostgreSQL bietet zwei Arten von Sequenzen: Der Datentyp serial basiert auf 4-Byte Integer Werten, die einen Wertebereich von etwa 4 Milliarden Werten abdecken. Der Datentyp serial8 bietet einen entsprechend größeren Wertebereich, dessen Grenzen in den allermeisten Fällen in praktischen Anwendungen kaum zum Tragen kommen.