postgresql 检查约束中的SQL子查询

jtjikinw  于 2023-05-06  发布在  PostgreSQL
关注(0)|答案(2)|浏览(140)

我可以在检查约束中进行SQL子查询吗?
我有一个post表,列为id, owner
我有另一个表action,列user_id, post_id
user,列id
post_id -> post.iduser_id -> user.id以及post.owner -> user.id
现在我想将post(post_id).id != user_id约束到表action
这怎么可能?

8ehkhllq

8ehkhllq1#

不支持在CHECK约束中查看当前行以外的内容。
http://www.postgresql.org/docs/9.1/interactive/sql-createtable.html说:
指定为列约束的check约束应仅引用该列的值,而出现在表约束中的表达式可以引用多个列。
目前,CHECK表达式不能包含子查询,也不能引用当前行的列以外的变量。
这种限制有很好的理由,但是如果你喜欢在交通繁忙的时候骑着独轮车摆弄燃烧的 Torch ,你可以使用函数来颠覆这种限制。在这种情况下,这将 * 不会 * 回来咬你是罕见的;在触发器代码中强制使用不变量会安全得多。
http://www.postgresql.org/docs/9.1/interactive/triggers.html

ddrv8njm

ddrv8njm2#

一个更好的方法是使用一个before insert/update触发器来执行检查,如果失败,它应该引发一个异常,这将转出整个插入/更新...如果通过,则执行插入/更新。

相关问题