Как я могу временно отключить все ограничения в таблице в Firebird 2.1?

Я хочу отключить все ограничения внешнего ключа и снова включить их после этого, есть ли способ сделать это?

Я знаю, что SQLServer это позволяет, но как насчет Firebird?


person Fabio Gomes    schedule 30.06.2009    source источник


Ответы (2)


Внешние ключи AFAICT не могут быть отключены в Firebird до версии 2.1.
Вам придется их удалить и создать заново.
Существует похожая тема на Devshed.

person Douglas Tosi    schedule 01.07.2009
comment
+1. С помощью инструмента, который показывает системные таблицы, можно увидеть, что в RDB$RELATION_CONSTRAINTS нет поля, которое позволило бы отключить ограничения внешнего ключа. Индексы OTOH можно сделать неактивными, а в RDB$INDICES есть поле RDB$INDEX_INACTIVE. - person mghie; 01.07.2009
comment
Да, но индексы, поддерживающие ограничения, нельзя деактивировать. Попытка сделать это приводит к ошибке. - person Douglas Tosi; 01.07.2009

Я думаю, единственный способ - удалить их, а затем воссоздать. Поскольку ограничения не являются данными, вы действительно не теряете никакой информации из базы данных, так что это безвредная операция (при условии, что вы сохраните скрипт для их последующего воссоздания).

Версия FlameRobin в репозитории SVN имеет возможность автоматически генерировать эти сценарии DROP и CREATE для выбранных зависимостей столбцов таблицы. В последнем официальном релизе есть такая же опция для целых таблиц, так что это может вам помочь. Однако нет возможности сделать это для всей базы данных. Может другой админ. инструмент имеет эту функцию.

person Milan Babuškov    schedule 03.05.2010