В Postgresql сила уникальна для комбинации двух столбцов

Я хотел бы настроить таблицу в postgresql так, чтобы два столбца вместе были уникальными. Может быть несколько значений любого значения, если нет двух, которые разделяют оба.

например:

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

3 ответов


CREATE TABLE someTable (
    id serial primary key,
    col1 int NOT NULL,
    col2 int NOT NULL,
    unique (col1, col2)
)

autoincrement не является postgresql. Вы хотите serial.

если col1 и col2 делают уникальный и не может быть нулевым, то они делают хороший первичный ключ:

CREATE TABLE someTable (
    col1 int NOT NULL,
    col2 int NOT NULL,
    primary key (col1, col2)
)

создайте уникальное ограничение, что два числа вместе не могут быть повторены вместе:

ALTER TABLE someTable
ADD UNIQUE (col1, col2)

похоже на регулярное уникальное ограничение:)

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

больше здесь