Méthodes pour définir/réinitialiser une séquence dans PostgreSQL
(pas nécessairement à max(id)
).
-
Il y a le moyen simple que vous avez dans la question. Vous pouvez définir la séquence pour qu'elle commence à un nombre arbitraire avec
setval()
:SELECT setval('tbl_id_seq');
-
Ensuite, il y a la méthode SQL standard avec
ALTER SEQUENCE
faire de même :ALTER SEQUENCE myseq RESTART WITH 1;
-
Si vous souhaitez redémarrer vos séquences à des numéros autres que le 1 par défaut :
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
-
Et il existe un autre moyen, lorsque vous videz une table avec TRUNCATE :
TRUNCATE foo RESTART IDENTITY;
Exécute implicitement
ALTER SEQUENCE foo_id_seq RESTART;