检查 Postgresql 中条件的约束
Check constraint for a condition in Postgresql
我正在尝试创建一个检查约束以防止人们将 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
我没有得到预期的结果。但是我似乎无法使检查约束起作用
据推测,错误是因为您有违反约束的现有数据。因此,检查现有数据是否属实:
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));
我正在尝试创建一个检查约束以防止人们将 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
我没有得到预期的结果。但是我似乎无法使检查约束起作用
据推测,错误是因为您有违反约束的现有数据。因此,检查现有数据是否属实:
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));