PostgreSQL 9.2 を使用しており、列に条件付き制約を追加する必要があります。基本的に、他の 2 つの列に特定の値がある場合、その列が false であることを確認したいと考えています。
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、レルムが常に nodeaccess_rid であることを確認しようとしています。私が得るエラーは次のとおりです。
ERROR: check constraint "block_anonymous_page_edit" is violated by some row
編集
これは、更新時にトリガーされる機能でなければならないと思います。
編集
上記の質問に行を追加したため、承認済みのソリューションを以下のコメントで更新しました。