11

liquibase とadd-foreign-key-constraintのドキュメントを見ると、deferrableというプロパティがあります。しかし、ドキュメントには、そのプロパティが何をするかについては実際には言及されていません。誰でも知っていますか?

4

1 に答える 1

16

DEFERRABLE
NOT DEFERRABLE
これは、制約を延期できるかどうかを制御します。延期できない制約は、すべてのコマンドの直後にチェックされます。遅延可能な制約のチェックは、トランザクションの終了まで延期される場合があります (SET CONSTRAINTS コマンドを使用)。NOT DEFERRABLE がデフォルトです。現在、この句を受け入れるのは外部キー制約のみです。他のすべての制約タイプは延期できません。

[ソース] http://www.postgresql.org/docs/8.1/static/sql-createtable.html

つまり、2 つのテーブルに循環 FK 依存関係があるとします。両方のテーブルに参照データが存在せず、FK 制約が保留されていない状態でデータを挿入すると、FK 制約に違反するため、DB はエラーをスローします。延期した場合、検証はトランザクションのコミット時に実行されます。

于 2012-07-10T00:31:25.353 に答える