将UNIQUE约束转换为CHECK或触发器

时间:2017-02-23 16:33:17

标签: postgresql triggers constraints unique

我想修改我的表约束。从现在开始,名称必须是唯一的。但是,只有当具有给定名称的行处于活动状态时,我才会拥有唯一的名称。所以我添加了列is_active。

CREATE TABLE item
(
(...)
name character varying(50) NOT NULL,
is_active boolean NOT NULL DEFAULT true,
CONSTRAINT uc_item_name UNIQUE (name),
(...)
)

我可以删除唯一约束并添加触发器或函数调用吗?

  • 如果表中不存在新名称则返回true或allow 插入,
  • 如果给出新名称至少退出一行,则迭代 他们并检查是否至少有一个是活跃的。如果是 - 插入失败 否则在表中添加行。

任何人都可以帮助我吗?这只是我与Postgres一起冒险的开始。我使用的是版本9.6

1 个答案:

答案 0 :(得分:4)

您可以创建部分唯一索引:

create unique index on item (name) 
where is_active;