Ошибка «Key violation»

Если у вас при добавлении чего-либо возникает ошибка Key violation, то это значит, что уникальный ID уже существует в таблице, в которую производится запись. Один из вариантов появления данной ошибки описан ниже.

У одного из кинотеатров возникла ошибка при добавлении нового права в программе Управление пользователями (User_Manager.exe).
User_Manager-Key_violation
Шаги по решению данной проблемы следующие:

  1. Определяем в какую таблицу программа попыталась сделать запись —  SYS_USER_RIGHTS.
  2. Дальше определяем максимальное значение ID.

    SELECT MAX(USER_RIGHT_ID) FROM SYS_USER_RIGHTS;

    Запрос выдаст единственное значение. В нашем случае 141.

  3. Смотрим какое значение сейчас у генератора, который отвечает за USER_RIGHT_ID.

    SELECT GEN_ID(SYS_USER_RIGHT_ID, 0) FROM RDB$DATABASE;

    В ответ получили 8.

  4. Сравнивая эти два числа сразу становится ясным почему возникает ошибка Key violation. Такое расхождение возникло, скорей всего, из-за некорректного обновления Премьеры до новой версии.
  5. Последним шагом нужно обновить генератор до нужного нам значения, т.е. до 141.

    ALTER SEQUENCE SYS_USER_RIGHT_ID RESTART WITH 141;

  6. Пробуем снова добавить правило… Ошибки нет!