0
パーシャルユニークインデックスを持つステートマシンの完全性を保護したいと考えています。 listing_id
の場合、status < 3
のレコードは1つ以上であってはなりません。言い換えればPostgres:パーシャルユニークインデックス
、これはokです:
listing_id, array_agg(status)
1234, {0,3,3}
しかし、これではありません。
listing_id, array_agg(status)
1234, {0,1,3}
私が最初に考えたのは、このようなものだった:
CREATE UNIQUE INDEX
uq_state_machine_protection_per_listing_id
ON listing_version(listing_id, status)
WHERE status in (0,1,2);
しかし、それは良いことではありません十分に - それは複数のレコードを防止するだけです同じ値の少ないtha上記のマイナスの例は、依然として制約に合格します。
@kelorekまあ、listing_idを含める場合は、もう一方の列は必要ありません。 –
ああ、そうだね – kelorek