我正在设置Postgres表来组织公司中的活动商店佣金,并且需要设置规则以防止插入错误。
我试图创建一个没有约束的表,并在Python脚本中设置规则。尽管此解决方案有效,但是它并不能防止我或其他人在尝试更新我的表时弄乱自己。
create table my_store_commissions (
ID SERIAL PRIMARY KEY ,
STORE_ID INTEGER,
COMMISSION NUMERIC,
IS_ACTIVE BOOLEAN
);
insert into my_store_commissions
values (1,100,0.90, False),
(2,100,0.89, False),
(3,100,0.78, False),
(4,100,0.78, True),
-- This code should not run
insert into my_store_commissions
values (5,100, 0.90, True)
我需要拥有store_id
的一个以上is_active = False
,但拥有store_id
的一个is_active = True
。
答案 0 :(得分:3)
您想要的是partial [unique] index。也就是说,具有过滤器的唯一索引:
create unique index unq_my_store_commissions_store_id_active
on my_store_commissions(store_id)
where is_active;
请注意,在切换活动存储时,可能很难处理这些问题。您可能需要先停用上一个商店,然后再设置新商店。