Рассмотрим таблицу
CREATE TABLE foo
(
id uuid NOT NULL DEFAULT uuid_generate_v4(),
col1 integer NOT NULL,
col2 integer NOT NULL,
col3 integer
)
Мне нужно проверить уникальность на (col1, col2, col3)
, с NULL в col3
, означающим любое значение. То есть, если в таблице есть строка (1, 2, NULL)
, будет невозможно вставить строку с col1 = 1
, col2 = 2
и любым значением в col3
(включая NULL). И наоборот, если в таблице есть хотя бы одна строка с col1 = 1
и col2 = 2
и некоторое значение не NULL в col3
, вы не можете вставить строку (1, 2, NULL)
, но строку с col1 = 1
, col2 = 2
и любое значение в col3
(кроме NULL) будет действительным.
Например, эти значения действительны (первый столбец идентификатора опущен):
(1, 2, 3)
(1, 2, 4)
(1, 2, 5)
или
(1, 2, NULL)
(1, 3, NULL)
Но эти значения недействительны:
(1, 2, NULL)
(1, 2, 3)
(1, 2, 4)
или
(1, 2, NULL)
(1, 2, NULL)
(1, 2, 3)
(1, 2, 4)
Могу ли я сделать это с помощью PostgreSQL? Я использую версию 9.6.5.