Möglichkeiten zum Setzen / Zurücksetzen einer Sequenz in PostgreSQL
(nicht unbedingt auf max(id)
).
-
Es gibt den einfachen Weg, den Sie in der Frage haben. Sie können die Sequenz mit
setval()
so einstellen, dass sie bei einer beliebigen Nummer beginnt :SELECT setval('tbl_id_seq');
-
Dann gibt es den Standard-SQL-Weg mit
ALTER SEQUENCE
dasselbe tun:ALTER SEQUENCE myseq RESTART WITH 1;
-
Wenn Sie Ihre Sequenzen bei anderen Nummern als der Standardnummer 1 neu starten möchten:
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
-
Und es gibt einen anderen Weg, wenn Sie eine Tabelle mit TRUNCATE leeren:
TRUNCATE foo RESTART IDENTITY;
Führt implizit
ALTER SEQUENCE foo_id_seq RESTART;
aus