277

2 つの列を合わせて一意にする必要があるように、PostgreSQL でテーブルを設定したいと考えています。両方を共有する 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
4

4 に答える 4

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

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

col1一意で nullにcol2できない場合は、適切な主キーを作成します。

CREATE TABLE someTable (
    col1 int NOT NULL,
    col2 int NOT NULL,
    PRIMARY KEY (col1, col2)
)
于 2013-01-08T18:38:46.027 に答える
220

2つの数値を一緒に繰り返すことはできないという一意の制約を作成します。

ALTER TABLE someTable
ADD UNIQUE (col1, col2)
于 2013-01-08T18:42:57.620 に答える
25

通常のUNIQUE CONSTRAINTのようです:)

CREATE TABLE example (
a integer,
b integer,
c integer,
UNIQUE (a, c));

詳細はこちら

于 2013-01-08T18:38:39.540 に答える