Вы можете отбросить все триггеры, непосредственно удалив их из системной таблицы, например:
delete from rdb$triggers
where (rdb$system_flag = 0 or rdb$system_flag is null);
Обратите внимание, что нормальный способ использования drop trigger
, безусловно, предпочтительнее, но это возможно.
Вы также можете отбросить ограничения, выполнив операторы DDL, но для перечисления ограничений и их отбрасывания в сценарии SQL вам потребуется функциональность execute block
, которой нет в Firebird 1.5.
Естьаналогичные операторы для удаления других объектов базы данных, но на самом деле их успешное выполнение может быть намного сложнее из-за зависимостей между объектами.Вы не можете уронить любой объект, если от него зависит другой объект.Это может стать действительно сложным из-за циклических ссылок, когда два (или даже больше) объекта зависят друг от друга, образуя цикл, поэтому нет ни одного, который можно было бы отбросить первым.
Обходэто сломать одну из зависимостей.Например, процедура, которая имеет зависимости от других объектов, может быть изменена, чтобы иметь пустое тело, после чего она больше не зависит от этих других объектов, поэтому они могут быть отброшены.Удаление внешних ключей - это еще один способ устранения зависимостей между таблицами.
Я не знаю ни одного инструмента, реализующего такое частичное удаление объектов базы данных, ваш вариант использования IMO далеко не распространен.Однако вы можете взглянуть на исходный код FlameRobin , который имеет определенное количество обнаружений зависимостей в коде, который используется для создания сценариев DDL или операторов модификации для объектов базы данных.Вооружившись этой информацией, вы могли бы написать свой собственный инструмент для этого.
Если это разовая вещь, то, возможно, будет достаточно сделать это вручную.Для этого используйте любой инструмент управления Firebird по вашему выбору.