Можно ли иметь собственное ограничение уникального столбца следующим образом? Предположим, у меня есть два столбца subset
и type
обе строки (хотя типы данных, вероятно, не имеют значения).
Если type
это "правда", то я хочу, чтобы комбинация type
и subset
была уникальной. В противном случае, нет никаких ограничений. Я использую PostgreSQL 8.4 на Debian.
postgresql
index
constraint
unique-constraint
postgresql-8.4
Фахим Митха
источник
источник
Ответы:
Другими словами, вы хотите
subset
быть уникальным, еслиtype = 'true'
. Частичный уникальный индекс будет делать это:Таким образом, вы даже можете создавать комбинации с
NULL
уникальным, что невозможно в противном случае - как подробно описано в этом связанном ответе:ограничение для нескольких столбцов PostgreSQL и значения NULL
источник
Это дополняет ответ Эрвина выше, но PostgreSQL поддерживает несколько типов индексов. Они, как правило, не являются взаимоисключающими. Вы можете думать о них как о:
Все это можно комбинировать различными способами. Все, что вы делаете здесь, - это использование уникальных и частичных функций, так что вы получаете частичные уникальные индексы (которые, как вы выяснили, чрезвычайно полезны).
Но предположим, что вы хотите иметь нечувствительный к регистру индекс в поле подмножества, где тип равен true. Затем вы бы добавили функциональное определение:
Обратите внимание, что это создает уникальный индекс на выходе функции lower (), вызываемой для атрибута subset, где тип - true.
источник