我有如下表:是否可以在排除约束中使用IS NOT DISTINCT FROM?
CREATE TABLE claim (
claim_number TEXT NOT NULL,
line_id TEXT,
process TEXT NOT NULL
);
我想添加一个约束它,因此claim_number和line_id的组合始终是唯一的。
在大多数情况下,line_id为null,并且该索赔编号只有一行。在某些情况下,给定的claim_number会有多行,在这种情况下,line_id将始终包含一个值。这里的目标是能够在(claim_number,line_id)组合中强制使用唯一组合的约束,以便我可以将它用作INSERT...ON CONFLICT DO UPDATE
语句中的冲突目标,以便可以更新处理列。 UNIQUE约束不起作用,因为它不计算NULL = NULL,这是有道理的,但不是我所需要的。
我曾尝试加入排他条件如:
ALTER TABLE claim
ADD EXCLUDE (claim_number WITH =,
line_id WITH IS NOT DISTINCT FROM);
但是失败:
ERROR: syntax error at or near "IS"
有在排除限制使用IS NOT DISTINCT FROM
的方法吗?
Whyis line_id可为空?为什么是文字? (它似乎是一个数字) – wildplasser
一个简单的解决方法是定义一个默认值,它将等于您在应用程序中当然会处理的NULL值。也想知道为什么这些列是TEXT ... –
@wildplasser我把所有的ID作为TEXT,总是,所以具有前导零的值不会最终改变。例如,像009543219这样的SSN不应该作为INTEGER存储,因为它将丢失前导零。另外,claim_number中的数据是字母数字。基本上,如果我没有用它做数学,那么它不应该是一个数字。 –