Modi per impostare/reimpostare una sequenza in PostgreSQL
(non necessariamente a max(id)
).
-
C'è il modo semplice che hai nella domanda. Puoi impostare la sequenza in modo che inizi da un numero arbitrario con
setval()
:SELECT setval('tbl_id_seq');
-
Poi c'è il metodo SQL standard con
ALTER SEQUENCE
facendo lo stesso:ALTER SEQUENCE myseq RESTART WITH 1;
-
Se desideri riavviare le sequenze con numeri diversi da quello predefinito 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
-
E c'è un altro modo, quando svuoti una tabella con TRUNCATE:
TRUNCATE foo RESTART IDENTITY;
Esegue implicitamente
ALTER SEQUENCE foo_id_seq RESTART;