SET CONSTRAINTS 是一个用于在当前事务中设置约束检查行为的命令。
SET CONSTRAINTS 是在 PostgreSQL 7.0 中添加的。
变更历史
- PostgreSQL 9.4
- 当在事务块外执行时,会发出
WARNING(而不是ERROR)(提交 a6542a4b)
- 当在事务块外执行时,会发出
- PostgreSQL 7.0
- 添加于 (提交 1547ee01)
示例
SET CONSTRAINTS 的基本用法示例,演示了约束冲突检查如何被延迟到事务结束时进行
postgres=# CREATE TABLE foo (id INT UNIQUE DEFERRABLE, val TEXT); CREATE TABLE postgres=# INSERT INTO foo VALUES (1, 'hello'); INSERT 0 1 postgres=# BEGIN; BEGIN postgres=*# SET CONSTRAINTS foo_id_key DEFERRED; SET CONSTRAINTS postgres=*# INSERT INTO foo VALUES (1, 'world'); INSERT 0 1 postgres=*# COMMIT; ERROR: duplicate key value violates unique constraint "foo_id_key" DETAIL: Key (id)=(1) already exists.
如果在事务外使用 SET CONSTRAINTS,将发出一个 WARNING 警告
postgres=# SET CONSTRAINTS foo_id_key DEFERRED; WARNING: SET CONSTRAINTS can only be used in transaction blocks SET CONSTRAINTS
参考资料
- PostgreSQL 文档: SET CONSTRAINTS
