3

私はpostgresが初めてです。いくつかの一意の値に制約を設定するPostgreSQLの方法は何ですか(各ペアが一意になるように)。INDEXforフィールドbarとフィールドを作成する必要がありbazますか?

CREATE UNIQUE INDEX foo ON table_name(bar, baz);

そうでない場合、それを行う正しい方法は何ですか? 前もって感謝します。

4

2 に答える 2

3

各フィールドがそれ自体で一意である必要がある場合は、各フィールドに一意のインデックスを作成します。組み合わせでのみ一意にする必要がある場合は、両方のフィールドで単一の一意のインデックスを作成します。

各フィールドを 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 は一意ではないためです。

于 2012-05-29T04:49:55.823 に答える
3

すでに考えていることを行うことができます:両方のフィールドに一意の制約を作成します。このようにして、バックグラウンドで一意のインデックスが作成され、必要な動作が得られます。information_schemaさらに、両方が一意である必要があるという事実に基づいて、必要に応じて何らかのメタデータを推測するために、その情報を取得することができます。このオプションをお勧めします。これにはトリガーを使用することもできますが、この特定の要件には一意の制約の方が適しています。

于 2012-05-28T12:08:18.967 に答える