0
我想修改表约束。从现在起,名字必须是独一无二的。但是,我想要具有唯一的名称,只有当给定名称的行是活动的。所以我添加了列is_active。将UNIQUE约束转换为CHECK或触发器
CREATE TABLE item
(
(...)
name character varying(50) NOT NULL,
is_active boolean NOT NULL DEFAULT true,
CONSTRAINT uc_item_name UNIQUE (name),
(...)
)
我可以删除唯一约束,并添加触发器或函数调用,它会这么做:
- 如果给新名称未在表回报存在真实的或允许 插入,
- 如果给出至少一行中的新名称退出,重复执行 ,并检查是否至少有一个是活动的。如果是 - 失败插入 否则将行添加到表中。
任何人都可以帮我吗?这只是我与Postgres的冒险开始。我使用的是9.6版
这就是anwser!谢谢。我只是想知道如果我能够通过CHECK约束来调用返回布尔值的函数。可能吗?我问,因为我认为这将是实现我的目标的最优雅的方式 –
@Konrad:在默认[隔离级别](https://www.postgresql.org/docs/current/static/transaction-iso html的);两个使用相同'name'的同时插入不能看到对方,并且两者都会通过检查。一个唯一的索引自动处理并发。 –