NEXTVAL
je funkce pro získání další hodnoty ze sekvence.
Sequence je objekt, který vrací stále rostoucí čísla, různá pro každý hovor, bez ohledu na transakce atd.
Pokaždé, když zavoláte NEXTVAL
, získáte jiné číslo.
To se používá hlavně ke generování náhradních primárních klíčů pro vaše tabulky.
Můžete vytvořit tabulku takto:
CREATE SEQUENCE mysequence;
CREATE TABLE mytable (id BIGINT NOT NULL PRIMARY KEY, value INT);
a vložte hodnoty takto:
INSERT
INTO mytable (id, value)
VALUES
(NEXTVAL('mysequence'), 1),
(NEXTVAL('mysequence'), 2);
a uvidíte, co získáte:
SELECT * FROM mytable;
id | value
----+-------
1 | 1
2 | 2
PostgreSQL pro to nabízí pěkný syntaktický cukr:
CREATE TABLE mytable (id BIGSERIAL PRIMARY KEY, value INT);
což je ekvivalentní
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
a lze jej použít takto:
INSERT
INTO mytable (value)
VALUES (1),
(2); -- you can omit id, it will get filled for you.
Všimněte si, že i když vrátíte zpět svůj příkaz insert nebo spustíte souběžné příkazy ze dvou různých relací, vrácené sekvenční hodnoty nebudou nikdy stejné a nikdy nebudou znovu použity (přečtěte si drobné písmo v dokumentech, i když pod CYCLE
).
Můžete si tedy být jisti, že všechny hodnoty vašich primárních klíčů budou v tabulce generovány jedinečné.