Postgresql中的条件检查约束

3

我正在尝试创建一个检查约束条件,以防止人们将 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

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


2
你遇到了什么错误? - user330315
我认为约束名称超过32个字符。最好阅读“变量命名规则”。 - Muhammad Waheed
@MuhammadWaheed:在Postgres中,约束名称可以长达63个字符。 - user330315
@a_horse_with_no_name 我更新了op - Luffydude
1个回答

5

很可能是因为您现有的数据违反了约束条件而导致错误。因此,请检查现有数据是否属实:

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

请注意,这假设列不为null。(check约束和wherenull布尔值有不同的处理方式。)
编辑:
我认为你想要的逻辑是:
CHECK ((sales_status <> 3 ) or (progression_status >= 80));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接