NEXTVAL
er en funktion til at få den næste værdi fra en sekvens.
Sekvens er et objekt, som returnerer stadigt stigende tal, forskellige for hvert opkald, uanset transaktioner osv.
Hver gang du ringer til NEXTVAL
, får du et andet nummer.
Dette bruges hovedsageligt til at generere primære surrogatnøgler til dine tabeller.
Du kan oprette en tabel som denne:
CREATE SEQUENCE mysequence;
CREATE TABLE mytable (id BIGINT NOT NULL PRIMARY KEY, value INT);
og indsæt værdier som denne:
INSERT
INTO mytable (id, value)
VALUES
(NEXTVAL('mysequence'), 1),
(NEXTVAL('mysequence'), 2);
og se, hvad du får:
SELECT * FROM mytable;
id | value
----+-------
1 | 1
2 | 2
PostgreSQL tilbyder et godt syntakssukker til dette:
CREATE TABLE mytable (id BIGSERIAL PRIMARY KEY, value INT);
hvilket svarer til
CREATE SEQUENCE mytable_id_seq; -- table_column_'seq'
CREATE TABLE mytable (id BIGINT NOT NULL PRIMARY KEY DEFAULT NEXTVAL('mytable_id_seq'), value INT); -- it's not null and has a default value automatically
og kan bruges sådan her:
INSERT
INTO mytable (value)
VALUES (1),
(2); -- you can omit id, it will get filled for you.
Bemærk, at selvom du ruller din insert-sætning tilbage eller kører samtidige sætninger fra to forskellige sessioner, vil de returnerede sekvensværdier aldrig være de samme og aldrig blive genbrugt (læs det med småt i dokumenterne under CYCLE
).
Så du kan være sikker på, at alle værdierne af dine primære nøgler vil blive genereret unikke i tabellen.