回答:
つまり、次のsubset
場合に一意になりますtype = 'true'
。部分的に一意のインデックスは、それを行います。
CREATE UNIQUE INDEX tbl_some_name_idx ON tbl (subset) WHERE type = 'true';
この方法NULL
では、一意の組み合わせを作成することもできますが、それ以外の場合は不可能です-この関連する回答で詳細に説明されているように:
PostgreSQLの複数列の一意制約とNULL値
これは上記のErwinの答えを補足するものですが、PostgreSQLはさまざまな種類のインデックスをサポートしています。これらは一般的に相互に排他的ではありません。これらは次のように考えることができます。
これらはすべて、さまざまな方法で組み合わせることができます。ここで行っていることは、ユニークで部分的な機能を使用することです。これにより、部分的にユニークなインデックスが得られます(これは、発見する際に非常に便利です)。
ただし、typeがtrueであるサブセットフィールドに、大文字と小文字を区別しないインデックスを作成するとします。次に、機能定義を追加します。
CREATE INDEX my_index_name_idx_u ON tbl (lower(subset)) WHERE type;
これにより、typeがtrueであるサブセット属性で呼び出されるlower()関数の出力に一意のインデックスが作成されることに注意してください。