Использую PGSQL. Есть таблица CREATE TABLE forms ( id serial PRIMARY KEY, account INT NOT NULL, author text, type INT NOT NULL ); INSERT INTO forms(account, author, salary) VALUES (1, 'Иванов', 11), (2, 'Сидоров', 11), (3, 'Сергеев', 12) Нужно сделать набор полей (account, type) уникальным только для type = 11. Например обе записи нельзя было бы вставить, так как type = 11 (1, 'Иванов', 11), (1, 'Сидоров', 11) а например, записи можно было обе вставить, так как type != 11. (1, 'Иванов', 12), (1, 'Сидоров', 12) Как это можно сделать в PGSQL?
Буквально объявить такое нельзя, насколько я знаю. Но можно воспользоваться особенностью уникальных констрейнтов: если хотябы одно из полей содержит null, то вся комбинация полей не проверяется на уникальность. То есть можно завести дополнительное поле (вычисляемое), зависимое от type, которое будет равно null если type != 11. И создать правило уникальности unique(account, null_if_type_ne_11)