检查 Postgresql 中条件的约束

Check constraint for a condition in Postgresql

我正在尝试创建一个检查约束以防止人们将 sales_status 更改为 3,除非 progression_status80

我以为是

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

我没有得到预期的结果。但是我似乎无法使检查约束起作用

据推测,错误是因为您有违反约束的现有数据。因此,检查现有数据是否属实:

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));