Установка значения по умолчанию '00001'
может быть выполнена, определив поле с помощью:
NOT NULL DEFAULT right('0000' || to_char(SomeSequence.nextval),5)
(псевдокод для адаптации к СУБД, к которой вы подключены).
По сравнению с решением в вашей EDIT, это как минимум гарантирует, что 2 вставки одновременно от 2 разных пользователей получат разные значения.
Настоящая проблема связана с ограничением unique
на столбец. Это плохо работает при смешивании ручного ввода с вычисленными значениями.
Если как пользователь я ввожу (вручную) 00005
, то вставка завершится неудачей, когда SomeSequence
достигнет 5.
Я думаю, что эта проблема будет существовать независимо от того, как вы реализуете генерацию значений (последовательность, триггер, внешний код, ...)
Даже если вы справляетесь с кодированием некоторой дополнительной (и, вероятно, сложной) логики для управления этим, это, вероятно, уменьшит параллелизм.