Нет способа создать декларативное ограничение для такого рода вещей.Конечно, вы можете создать триггер уровня строки BEFORE INSERT, который будет автоматически заполнять ключ на основе последовательности (игнорируя любое значение, которое было предоставлено, если вы беспокоитесь о специальных вставках, которые не используют последовательность).
Если вы находитесь в ситуации, когда вам нужно увеличить последовательность, потому что кто-то ad hoc вставляет созданные строки с ключами, превышающими текущее значение последовательности, вашими двумя вариантами являются
- Создайте цикл, который вызывает nextval несколько раз
- ALTER последовательности, чтобы установить для INCREMENT BY любое нужное вам большое значение, один раз вызовите nextval и ALTER последовательности назад.Это требует, чтобы никто другой не использовал последовательность одновременно.Но это полезно, если вам нужно сделать что-то вроде сброса набора последовательностей после обновления данных из другой среды.