Я использую 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'));
Что это должно сделать, убедитесь, что grant_update равно 0, когда gid равен 1 и realm = nodeaccess_rid. Тем не менее, я думаю, вместо того, чтобы делать то, что хочу, он на самом деле пытается сделать все столбцы имитирующими эти значения. По сути, он пытается удостовериться, что grant_update всегда 0, gid всегда 1, а realm всегда nodeaccess_rid. Ошибка, которую я получаю:
ERROR: check constraint "block_anonymous_page_edit" is violated by some row
ИЗМЕНИТЬ
Я думаю, что это будет функция, которая запускается при обновлении.
ИЗМЕНИТЬ
Я добавил строку к указанному выше вопросу и, следовательно, обновил утвержденное решение с комментарием ниже.