Postgresqlでは、2つの列の組み合わせを一意に強制する 質問する

Postgresqlでは、2つの列の組み合わせを一意に強制する 質問する

PostgreSQL で、2 つの列が一緒に一意になるようにテーブルを設定したいと思います。両方の値を共有する 2 つの列がない限り、どちらかの値が複数存在してもかまいません。

例えば:

CREATE TABLE someTable (
    id int PRIMARY KEY AUTOINCREMENT,
    col1 int NOT NULL,
    col2 int NOT NULL
)

つまり、col1と はcol2繰り返すことができますが、同時にはできません。したがって、これは許可されます (id は含みません)

1 1
1 2
2 1
2 2

しかし、これは違います:

1 1
1 2
1 1 -- would reject this insert for violating constraints

ベストアンサー1

CREATE TABLE someTable (
    id serial PRIMARY KEY,
    col1 int NOT NULL,
    col2 int NOT NULL,
    UNIQUE (col1, col2)
)

autoincrementpostgresql ではありません。PG 9 以下を使用している場合は、integer primary key generated always as identity(または)が必要です。serialserialPG 10では非推奨となった)。

col1および が一意であり、null にできない場合はcol2、適切な主キーになります。

CREATE TABLE someTable (
    col1 int NOT NULL,
    col2 int NOT NULL,
    PRIMARY KEY (col1, col2)
)

おすすめ記事