В Postgresql Force уникален по сочетанию двух столбцов

Я хотел бы настроить таблицу в 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

Ответ 1

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)
)

Ответ 2

Создайте уникальное ограничение того, что два числа вместе НЕ МОЖЕШЬ вместе повторяться:

ALTER TABLE someTable
ADD UNIQUE (col1, col2)

Ответ 3

Кажется, что обычный UNIQUE CONSTRAINT:)

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

Подробнее здесь