У меня проблема с тем, что мне нужно сохранить и увеличить поле номера объекта в таблице, однако это число должно быть уникальным в пределах данного логического домена, а не по всей таблице.
Примером может быть несколько предприятий, планирующих несколько рабочих мест; Job.Number должен быть уникальным в рамках бизнеса.
Поэтому мне нужно убедиться, что одновременные операции по созданию рабочих мест не производят задания с одинаковым номером.
В настоящее время я вижу только один способ реализовать это (в postresql):
Заблокируйте таблицу с помощью самоблокирующегося типа блокировки, скажем «SHARE UPDATE EXCLUSIVE», чтобы все другие операции этого типа приходились в очередь и ожидали, гарантируя, что функция MAX () всегда возвращает уникальное значение.
Однако, похоже, у этого решения есть огромный недостаток - оно, по сути, создает узкое место для всех операций INSERT в таблице Jobs.
Я не думаю, что могу использовать последовательности Postgreql, потому что:
- Я не хочу создавать новую последовательность для каждого нового бизнеса
- Может иметь пробелы
Не могли бы вы предложить другие способы решения этой проблемы?