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 SEQUENCEudě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;