如何在 Firebird 2.1 中临时禁用表中的所有约束?

Posted

技术标签:

【中文标题】如何在 Firebird 2.1 中临时禁用表中的所有约束?【英文标题】:How can I temporarily disable all constraints in a Table in Firebird 2.1? 【发布时间】:2010-11-07 00:14:15 【问题描述】:

我想禁用所有外键约束并在之后重新启用它们,有什么方法可以做到吗?

我知道 SQLServer 允许这样做,但是 Firebird 呢?

【问题讨论】:

【参考方案1】:

在 Firebird 2.1 之前无法禁用 AFAICT 外键。 您必须删除并重新创建它们。 Devshed 上有一个similar thread。

【讨论】:

+1。使用显示系统表的工具,可以看到 RDB$RELATION_CONSTRAINTS 中没有允许禁用外键约束的字段。可以使索引 OTOH 处于非活动状态,并且 RDB$INDICES 有一个字段 RDB$INDEX_INACTIVE。 是的,但是支持约束的索引我不能停用。尝试这样做会导致错误。【参考方案2】:

我想唯一的方法是删除它们然后重新创建它们。由于约束不是数据,因此您确实不会丢失数据库中的任何信息,因此这是一个无害的操作(前提是您保留脚本以便以后重新创建它们)。

SVN 存储库中的FlameRobin 版本有一个选项可以为选定的表列依赖项自动生成这些 DROP 和 CREATE 脚本。上一个正式版本对整个表格都有相同的选项,所以这可能会对您有所帮助。但是,没有选择对整个数据库执行此操作。也许其他一些管理员。工具有这个功能。

【讨论】:

以上是关于如何在 Firebird 2.1 中临时禁用表中的所有约束?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Firebird 2.1 中优化此查询?

从 Firebird 数据库表中获取列名列表

了解 Firebird 监控表中的 MON$STAT_ID

如何测量 Firebird 2.1 数据库上 blob 占用的空间量?

如何禁用唯一密钥

如何在 PostgreSQL 中临时禁用触发器?