Các cách thiết lập / đặt lại trình tự trong PostgreSQL
(không nhất thiết phải max(id)
).
-
Có một cách đơn giản mà bạn có trong câu hỏi. Bạn có thể đặt chuỗi bắt đầu ở một số tùy ý bằng
setval()
:SELECT setval('tbl_id_seq');
-
Sau đó, có cách SQL tiêu chuẩn với
ALTER SEQUENCE
làm tương tự:ALTER SEQUENCE myseq RESTART WITH 1;
-
Nếu bạn muốn bắt đầu lại trình tự của mình ở các số khác với số 1 mặc định:
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
-
Và có một cách khác, khi bạn làm trống một bảng với TRUNCATE:
TRUNCATE foo RESTART IDENTITY;
Thực thi ngầm định
ALTER SEQUENCE foo_id_seq RESTART;