Представьте, что у вас есть простая таблица:
name | is_active
----------------
A | 0
A | 0
B | 0
C | 1
... | ...
Мне нужно создать специальное уникальное ограничение, которое не выполняется в следующей ситуации: разные is_activeзначения не могут сосуществовать для одного и того же nameзначения.
Пример допустимого условия:
Примечание: простой многостолбцовый уникальный индекс не допускает такой комбинации.
A | 0
A | 0
B | 0
Пример допустимого условия:
A | 0
B | 1
Пример сбойного условия:
A | 0
A | 1
-- should be prevented, because `A 0` exists
-- same name, but different `is_active`
В идеале мне нужно уникальное ограничение или уникальный частичный индекс. Триггеры для меня более проблематичны.
Двойной A,0разрешен, но (A,0) (A,1)нет.
ERROR: data type boolean has no default operator class for access method "gist"