Обслуживание диапазона номеров в PostgreSQL - PullRequest
0 голосов
/ 02 мая 2018

У меня есть требование поддерживать диапазон номеров для каждого из клиентов, которых я зарегистрировал в своей системе.

Сценарий использования заключается в том, что клиент получает возможность выбрать свой диапазон начальных и конечных номеров как часть процесса регистрации пользователя, и каждый объект домена, который он создает в системе, будет создан с автоматически увеличенным номером из диапазона, который у него есть. указано. т.е. существующий номер + 1

Существует также требование, чтобы после исчерпания чисел в диапазоне числа начали вращаться.

Также они могут изменить свой диапазон номеров в любое время.

Т.е. эта логика кажется очень близкой к типичной последовательности базы данных, кроме того факта, что клиент указывает диапазон номеров, т. Е. Это не определенный диапазон номеров

Я хотел бы знать, могу ли я создать последовательность динамически, возможно, как часть хранимого процесса, где я могу передать имя последовательности клиента и диапазон номеров?

1 Ответ

0 голосов
/ 02 мая 2018

Вы можете уверенно создавать последовательность динамически:

so=# do 'begin execute ''create sequence a cycle start with 93 maxvalue 94 minvalue 93''; end;';
DO

so=# select nextval('a'), nextval('a'),nextval('a'),nextval('a'),nextval('a');
 nextval | nextval | nextval | nextval | nextval
---------+---------+---------+---------+---------
      93 |      94 |      93 |      94 |      93

Но сначала - вы можете раздуть словарь со слишком большим количеством последовательностей, и затем я не вижу никакой необходимости, если только сам пользователь может вращать число - просто используйте update blah set num = least(maxnumber,num + 1) или что-то вроде этого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...