私はpostgresが初めてです。いくつかの一意の値に制約を設定するPostgreSQLの方法は何ですか(各ペアが一意になるように)。INDEX
forフィールドbar
とフィールドを作成する必要がありbaz
ますか?
CREATE UNIQUE INDEX foo ON table_name(bar, baz);
そうでない場合、それを行う正しい方法は何ですか? 前もって感謝します。
私はpostgresが初めてです。いくつかの一意の値に制約を設定するPostgreSQLの方法は何ですか(各ペアが一意になるように)。INDEX
forフィールドbar
とフィールドを作成する必要がありbaz
ますか?
CREATE UNIQUE INDEX foo ON table_name(bar, baz);
そうでない場合、それを行う正しい方法は何ですか? 前もって感謝します。
各フィールドがそれ自体で一意である必要がある場合は、各フィールドに一意のインデックスを作成します。組み合わせでのみ一意にする必要がある場合は、両方のフィールドで単一の一意のインデックスを作成します。
各フィールドを NOT NULL に設定する必要がある場合は忘れずに設定してください。NULL は決して一意ではないため、次のようなことが発生する可能性があります。
create table test (a int, b int);
create unique index test_a_b_unq on test (a,b);
insert into test values (NULL,1);
insert into test values (NULL,1);
エラーは発生しません。2 つの NULL は一意ではないためです。
すでに考えていることを行うことができます:両方のフィールドに一意の制約を作成します。このようにして、バックグラウンドで一意のインデックスが作成され、必要な動作が得られます。information_schema
さらに、両方が一意である必要があるという事実に基づいて、必要に応じて何らかのメタデータを推測するために、その情報を取得することができます。このオプションをお勧めします。これにはトリガーを使用することもできますが、この特定の要件には一意の制約の方が適しています。