1. ホーム
  2. sql

[解決済み】Postgresqlで、2つのカラムの組み合わせで一意性を強制する。

2022-04-03 13:27:31

質問

PostgreSQLで、2つの列が一意でなければならないようなテーブルを設定したいのです。どちらかの値が複数あっても構いませんが、両方を共有するものが2つない限りです。

例えば

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

だから col1col2 は繰り返せますが、同時にはできません。つまり、次のようなものが許されます(idは含まれません)。

1 1
1 2
2 1
2 2

が、これは違う。

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

解決方法は?

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

autoincrement はpostgresqlではありません。を指定する必要があります。 integer primary key generated always as identity (または serial PG 9 以下を使用する場合。 serial は、PG 10 でソフト非推奨となりました。 ).

もし col1col2 が一意であり、NULLであってはならないのであれば、これらは良い主キーになります。

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