Вы можете определить такое ограничение, используя исключающие ограничения
Для работы следующего примера вам необходимо установить расширение btree_gist
create table uploads
(
fileid integer,
value integer
);
alter table uploads
add constraint unique_value
exclude using gist (value with =, fileid with <>);
Таким образом, будут работать следующие вставки:
insert into uploads values (1, 100);
insert into uploads values (2, 200);
insert into uploads values (1, 100);
Но эта ошибка не будет выполнена:
insert into uploads values (2, 100);
с сообщением об ошибке:
ERROR: conflicting key value violates exclusion constraint "unique_value"
Detail: Key (value, fileid)=(100, 2) conflicts with existing key (value, fileid)=(100, 1).