私はPostgreSQL 9.2を使用しており、カラムに条件付き制約を追加する必要があります。基本的には、他の2つの列にある値があるときに列が偽であることを確認したい。Postgres 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
例:GIDは1とレルム= nodeaccess_ridあるとき、これが行うことになっている何
alter table node_access add constraint block_anonymous_page_edit
check (grant_update = 0 WHERE (gid = 1 AND 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
EDIT
私は、これは、更新時に起動されます機能する必要があるとしていると思います。
EDIT
私は上記の質問に行を追加して、その結果、以下のコメントで承認されたソリューションを更新しました。
'int_unsigned'とは' Postgresの中に存在しないタイプsmallint_unsigned'です。あなたの質問をきれいにしてください。 –
存在しないかどうかは、データベースのロールアップ方法です。その問題は正当なものです。 – thepriebe