我正在使用 PostgreSQL 9.2,需要在列上添加条件约束。本质上,我想确保当其他两列具有特定值时,一列为假。
gid | int_unsigned | not null default 0
realm | character varying(255) | not null default ''::character varying
grant_update | smallint_unsigned | not null default (0)::smallint
grant_delete | smallint_unsigned | not null default (0)::smallint
例子:
alter table node_access add constraint block_anonymous_page_edit
check (grant_update = 0 WHERE (gid = 1 AND realm = 'nodeaccess_rid'));
这应该做的是确保当 gid 为 1 且 realm = nodeaccess_rid 时 grant_update 等于 0。但是,我认为与其做我想做的事,不如说它实际上是在尝试让所有列都模仿这些值。本质上,它试图确保grant_update 始终为0,gid 始终为1,并且realm 始终为nodeaccess_rid。我得到的错误是:
ERROR: check constraint "block_anonymous_page_edit" is violated by some row
编辑
我认为这必须是一个在更新时触发的功能。
编辑
我在上面的问题中添加了一行,因此在下面的评论中更新了批准的解决方案。