Maneiras de definir/redefinir uma sequência no PostgreSQL
(não necessariamente para
max(id)
). -
Há a maneira simples que você tem na pergunta. Você pode definir a sequência para iniciar em um número arbitrário comsetval()
:
SELECT setval('tbl_id_seq');
-
Depois, há o modo SQL padrão comALTER SEQUENCE
fazendo o mesmo:
ALTER SEQUENCE myseq RESTART WITH 1;
-
Se você gosta de reiniciar suas sequências em números diferentes do padrão 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 há outra maneira, quando você esvazia uma tabela com TRUNCATE:
TRUNCATE foo RESTART IDENTITY;
Executa implicitamenteALTER SEQUENCE foo_id_seq RESTART;