检查约束中的SQL子查询

时间:2012-04-16 17:55:33

标签: postgresql foreign-key-relationship plpgsql check-constraints

我可以在Check约束中创建SQL子查询吗?

我有一个post表,其中包含id, owner列 我还有另一张表格action,其中包含user_id, post_id列 列user

的表id

post_id -> post.iduser_id -> user.idpost.owner -> user.id

现在我想约束post(post_id).id != user_id

上的action

这怎么可能?

1 个答案:

答案 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