我可以在Check约束中创建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
这怎么可能?
答案 0 :(得分:60)
不支持超出CHECK约束中的当前行。
http://www.postgresql.org/docs/9.1/interactive/sql-createtable.html说:
指定为列约束的检查约束应该引用 该列只有值,而表达式中出现的表达式 约束可以引用多个列。
目前,CHECK表达式不能包含子查询,也不能引用 除当前行的列之外的变量。
这种限制有充分的理由,但是如果你喜欢在交通繁忙的情况下骑单轮脚踏车时耍火焰火把,你可以使用功能来破坏限制。这将不回来咬你的情况很少见;你可以更安全地在触发代码中强制执行不变量。
http://www.postgresql.org/docs/9.1/interactive/triggers.html