PostgreSQL имеет набор функций, которые управляют последовательностями .Таким образом, вы можете сделать что-то вроде этого.(Но не делайте этого. См. «Используйте собственный кеш PostgreSQL» ниже.)
drop sequence test;
create sequence test;
-- You'll want to wrap these in a single transaction.
select nextval('test'); -- Returns 1
select (setval('test', currval('test') + 1000)) as t; -- Returns 1001
select nextval('test'); -- Returns 1002
Есть несколько других способов получить набор значений из последовательности.См. Документы для CREATE SEQUENCE .
Увеличьте последовательность на 1000, а не на 1. Пусть ваше приложение обработает тысячи значений ниже, чем nextval ().Вы, вероятно, в конечном итоге выбросите много чисел.
drop sequence test;
create sequence test increment by 1000;
select nextval('test'); -- Returns 1; do this when you create the sequence.
select nextval('test'); -- Returns 1001
Используйте собственный кеш PostgreSQL .Я почти уверен, что это будет самый надежный и надежный подход.
drop sequence test;
create sequence test cache 1000;
select nextval('test'); -- Returns 1.
select nextval('test'); -- Returns 2 from the cache; doesn't touch the sequence.
Другой параллельный сеанс не увидит того же.
select nextval('test'); -- Returns 1001