NEXTVAL
är en funktion för att få nästa värde från en sekvens.
Sekvens är ett objekt som returnerar ständigt ökande antal, olika för varje samtal, oavsett transaktioner etc.
Varje gång du ringer NEXTVAL
, får du ett annat nummer.
Detta används huvudsakligen för att generera primära surrogatnycklar för dina tabeller.
Du kan skapa en tabell så här:
CREATE SEQUENCE mysequence;
CREATE TABLE mytable (id BIGINT NOT NULL PRIMARY KEY, value INT);
och infoga värden så här:
INSERT
INTO mytable (id, value)
VALUES
(NEXTVAL('mysequence'), 1),
(NEXTVAL('mysequence'), 2);
och se vad du får:
SELECT * FROM mytable;
id | value
----+-------
1 | 1
2 | 2
PostgreSQL erbjuder ett bra syntaxsocker för detta:
CREATE TABLE mytable (id BIGSERIAL PRIMARY KEY, value INT);
vilket motsvarar
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
och kan användas så här:
INSERT
INTO mytable (value)
VALUES (1),
(2); -- you can omit id, it will get filled for you.
Observera att även om du återställer din insert-sats eller kör samtidiga satser från två olika sessioner, kommer de returnerade sekvensvärdena aldrig att vara desamma och aldrig återanvändas (läs det finstilta i dokumentet dock under CYCLE
).
Så du kan vara säker på att alla värden för dina primärnycklar kommer att genereras unika i tabellen.