PostgreSQL Уникальное ограничение с исключениями
У меня есть стол:
CREATE TABLE dbo."TransportInteraction"
(
"Id" bigint NOT NULL DEFAULT nextval('dbo."TransportInteraction_Id_seq"'::regclass),
"Message" character varying(256),
"TransportActionId" integer NOT NULL,
"TimeCreated" timestamp without time zone NOT NULL,
"TimeInserted" timestamp without time zone NOT NULL,
"TaskId" bigint
)
Как правило, эта таблица отображает действия для задачи. TransportActionId
является integer
определение типа действия. Некоторые типы действий должны быть уникальными для каждой задачи, а некоторые нет.
Поэтому мне нужно ограничение типа:UNIQUE ("TaskId", "TransportActionId")
применяя ко всем действиям с TransportActionId != (2||3 || 4)
,
Так что все действия, кроме тех, с ActionId=2,3 or 4
,
Есть идеи?
1 ответ
Решение
Используйте частичный уникальный индекс. Подобно:
CREATE UNIQUE INDEX transint_partial_uni_idx
ON dbo."TransportInteraction" ("TaskId", "TransportActionId")
WHERE TransportActionId NOT IN (2,3,4);
Тесно связанные ответы с более подробной информацией:
Создать уникальное ограничение с пустыми столбцами
Уникальная комбинация в столе