Sätt att ställa in/återställa en sekvens i PostgreSQL
(inte nödvändigtvis till max(id)
).
-
Det är det enkla sättet du har i frågan. Du kan ställa in sekvensen så att den börjar på ett godtyckligt tal med
setval()
:SELECT setval('tbl_id_seq');
-
Sedan finns det standard-SQL-sättet med
ALTER SEQUENCE
gör samma sak:ALTER SEQUENCE myseq RESTART WITH 1;
-
Om du vill starta om dina sekvenser med andra nummer än standard 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
-
Och det finns ett annat sätt, när du tömmer en tabell med TRUNCATE:
TRUNCATE foo RESTART IDENTITY;
Exekverar implicit
ALTER SEQUENCE foo_id_seq RESTART;