Způsoby nastavení/resetování sekvence v PostgreSQL
(ne nutně na max(id)
).
-
Existuje jednoduchý způsob, který máte v otázce. Pomocí
setval()
můžete nastavit, aby sekvence začínala na libovolném čísle :SELECT setval('tbl_id_seq');
-
Pak je tu standardní způsob SQL s
ALTER SEQUENCE
uděláte totéž:ALTER SEQUENCE myseq RESTART WITH 1;
-
Pokud chcete restartovat sekvence s jinými čísly, než je výchozí 1:
CREATE TABLE foo(id serial, a text); -- creates sequence "foo_id_seq" INSERT INTO foo(a) VALUES('a'); -- seq. starts with --> 1 ALTER SEQUENCE foo_id_seq START WITH 10; -- doesn't restart sequence INSERT INTO foo(a) VALUES('b'); --> 2 ALTER SEQUENCE foo_id_seq RESTART; -- restarts sequence INSERT INTO foo(a) VALUES('c'); --> 10
-
A existuje další způsob, když vyprázdníte tabulku pomocí TRUNCATE:
TRUNCATE foo RESTART IDENTITY;
Implicitně provede
ALTER SEQUENCE foo_id_seq RESTART;