Does setval(nextval()+N) generate unique blocks of IDs?

Поиск
Список
Период
Сортировка
От Craig James
Тема Does setval(nextval()+N) generate unique blocks of IDs?
Дата
Msg-id CAFwQ8re6hFodxhfRcsrpywegFfRAVd9a3fe=9BOXL2dtezMEAQ@mail.gmail.com
обсуждение исходный текст
Ответы Re: Does setval(nextval()+N) generate unique blocks of IDs?  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-performance
Is seq.setval() "non transactional" in the same sense as seq.nextval()
is?  More specifically, suppose I sometimes want to get IDs one-by-one
using nextval(), but sometimes I want a block of a thousand IDs.  To
get the latter, I want to do this:

    select setval('object_id_seq', nextval('object_id_seq') + 1000, false);

Now suppose two processes do this simultaneously.  Maybe they're in
transactions, maybe they're not.  Are they guaranteed to get distinct
blocks of IDs?  Or is it possible that each will execute nextval() and
get N and N+1 respectively, and then do setval() to N+1000 and N+1001,
resulting in two overlapping blocks.

If the answer is, "This won't work," then what's a better way to do this?

Thanks,
Craig


В списке pgsql-performance по дате отправления:

Предыдущее
От: delongboy
Дата:
Сообщение: Re: Increasing WAL usage followed by sudden drop
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Does setval(nextval()+N) generate unique blocks of IDs?