具有异常的PostgreSQL唯一约束

Ane*_*lou 4 sql postgresql indexing check-constraints unique-constraint

我有一张桌子:

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
)
Run Code Online (Sandbox Code Playgroud)

通常,此表是对任务的映射操作.TransportActionId是一种integer定义行动的类型.某些操作类型对于每个任务必须是唯一的,而有些则不是.

所以我需要一个类型约束:
UNIQUE ("TaskId", "TransportActionId")适用于所有动作TransportActionId != (2||3 || 4).

所以所有行动除了那些ActionId=2,3 or 4.

有任何想法吗?

Erw*_*ter 7

使用部分唯一索引.喜欢:

CREATE UNIQUE INDEX transint_partial_uni_idx
ON dbo."TransportInteraction" ("TaskId", "TransportActionId")
WHERE TransportActionId NOT IN (2,3,4);
Run Code Online (Sandbox Code Playgroud)

具有更多详细信息的紧密相关答案:
使用空列创建唯一约束表中的
唯一组合