私は以下の表を持っている:除外制約で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であり、その請求番号の行は1つだけです。場合によっては、指定されたclaim_numberに複数の行があり、その場合、line_idには常に値が含まれます。ここでの目標は、プロセス列を更新できるように、INSERT...ON CONFLICT DO UPDATE
ステートメントで競合ターゲットとして使用できるように、(claim_number、line_id)コンボで一意の組み合わせを強制する制約を持つことです。 UNIQUE制約はNULL = NULLを評価しないため意味を持ちませんが、必要ではありません。
私は、次のような排他制約を追加しようとしている:除外制約でIS NOT DISTINCT FROM
を使用する方法はあり
ERROR: syntax error at or near "IS"
:
ALTER TABLE claim
ADD EXCLUDE (claim_number WITH =,
line_id WITH IS NOT DISTINCT FROM);
しかし、それはで失敗?
WhyisがNULL可能にLINE_ID?それはなぜテキストですか? (数字のようです) – wildplasser
単純な回避策は、アプリケーションで処理するNULL値に相当するデフォルト値を定義することです。また、なぜそれらの列がTEXTであるのか不思議です... –
@wildplasser先行ゼロを持つ値が変更されないように、すべてのIDをTEXTとして常に置きます。たとえば、009543219などのSSNは、先行ゼロを失うため、INTEGERとして格納しないでください。また、claim_numberのデータは英数字です。基本的に、私が数学をしていないなら、数字ではないはずです。 –