Liquibase add-foreign-key-constraint deferrable:这是什么意思?

时间:2012-07-10 00:17:46

标签: liquibase

查看liquibase和add-foreign-key-constraint的文档,有一个名为deferrable的属性。但是文档并没有真正提到该财产的作用。有人知道吗?

1 个答案:

答案 0 :(得分:13)

<强> DEFERRABLE
NOT DEFERRABLE
这可以控制是否可以延迟约束。在每个命令之后立即检查不可延迟的约束。检查可延迟的约束可能会推迟到事务结束(使用SET CONSTRAINTS命令)。 NOT DEFERRABLE是默认值。目前只有外键约束才接受此子句。所有其他约束类型都不可延迟。

[来源] http://www.postgresql.org/docs/8.1/static/sql-createtable.html

简而言之,假设两个表具有循环FK依赖性。当我们对两个表中不存在引用数据的数据执行插入并且不延迟FK约束时,DB将抛出错误,因为存在违反FK约束的情况。如果延期,则在提交交易时执行验证。