Предположительно, поскольку вы не предоставляете значение для столбца DB_ID
, это значение заполняется уровнем строки перед триггером вставки, определенным в таблице.Этот триггер, предположительно, выбирает значение из последовательности.
Поскольку данные были перемещены (предположительно недавно) из производственной базы данных, моя ставка заключалась в том, что при копировании данных последовательность не изменялась какЧто ж.Я предполагаю, что последовательность генерирует значения, которые намного ниже, чем наибольшее значение DB_ID
, которое в настоящее время находится в таблице, приводящей к ошибке.
Вы можете подтвердить это подозрение, посмотрев на триггер, чтобы определить, какая последовательностьиспользуется и выполняет
SELECT <<sequence name>>.nextval
FROM dual
и сравнивает это с
SELECT MAX(db_id)
FROM cmdb_db
Если, как я подозреваю, последовательность генерирует значения, которые уже существуют в базе данных, вы можете увеличитьпоследовательность до тех пор, пока он не будет генерировать неиспользуемые значения, или вы можете изменить его, чтобы установить INCREMENT
во что-то очень большое, получить значение nextval один раз и установить INCREMENT
обратно в 1.