Проверьте ограничение для условия в Postgresql - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь создать ограничение проверки, чтобы люди не могли изменить sales_status на 3, если progression_status не равно 80.

Я думал, что это

ALTER TABLE mytable 
   ADD CONSTRAINT sales_status_cant_be_3_for_nonprogressed 
   CHECK (((sales_status = 3 ) or (progression_status < 80)))

однако это возвращает ошибку о том, что какая-то строка нарушает его.Когда я запускаю запрос

select * from mytable where sales_status = 3 and progression_status < 80

, я не получаю ожидаемых результатов.И все же я не могу заставить проверочное ограничение работать

1 Ответ

0 голосов
/ 01 февраля 2019

Предположительно, ошибка в том, что у вас есть данные, которые нарушают ограничение.Итак, проверьте, верно ли это в существующих данных:

select t.*
from mytable t
where not ( (sales_status = 3 ) or (progression_status < 80) );

Обратите внимание, что это предполагает, что столбцы не null.(check ограничения и where трактуют null логические значения по-разному.)

РЕДАКТИРОВАТЬ:

Я думаю, что логика вам нужна:

CHECK ((sales_status <> 3 ) or (progression_status >= 80));
...