Måder at indstille/nulstille en sekvens i PostgreSQL
(ikke nødvendigvis til max(id)
).
-
Der er den enkle måde, du har i spørgsmålet. Du kan indstille sekvensen til at starte ved et vilkårligt tal med
setval()
:SELECT setval('tbl_id_seq');
-
Så er der standard SQL-måden med
ALTER SEQUENCE
gør det samme:ALTER SEQUENCE myseq RESTART WITH 1;
-
Hvis du kan lide at genstarte dine sekvenser ved andre tal end 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
-
Og der er en anden måde, når du tømmer en tabel med TRUNCATE:
TRUNCATE foo RESTART IDENTITY;
Implicit udfører
ALTER SEQUENCE foo_id_seq RESTART;