我可以在检查约束中进行 SQL 子查询吗?
我有一个post
带列的表id, owner
我有另一个action
带列的user_id, post_id
表user
带列的表id
post_id -> post.id
还有user_id -> user.id
_post.owner -> user.id
现在我想限制post(post_id).id != user_id
表action
这怎么可能?
我可以在检查约束中进行 SQL 子查询吗?
我有一个post
带列的表id, owner
我有另一个action
带列的user_id, post_id
表user
带列的表id
post_id -> post.id
还有user_id -> user.id
_post.owner -> user.id
现在我想限制post(post_id).id != user_id
表action
这怎么可能?
不支持在 CHECK 约束中查看当前行之外的内容。
http://www.postgresql.org/docs/9.1/interactive/sql-createtable.html说:
指定为列约束的检查约束应仅引用该列的值,而出现在表约束中的表达式可以引用多个列。
目前,CHECK 表达式不能包含子查询,也不能引用当前行列以外的变量。
这种限制有充分的理由,但如果你喜欢在交通拥挤的情况下骑独轮车时玩弄燃烧的火把,你可以使用函数来颠覆这个限制。这种情况不会再咬你的情况很少见;相反,在触发代码中强制执行不变量会更安全。
http://www.postgresql.org/docs/9.1/interactive/triggers.html