我的其中一张表有一个棘手的唯一性要求。
假设我们有一桌狗。狗住在房子里。
CREATE TABLE dogs (
dog_id integer,
house_id integer,
dogname varchar
}
狗的名字在房子里必须是唯一的。还有一个“主”房子,没有狗可能和主房子里的狗有相同的名字。
示例,其中 house_id 0 是“主”房子:
dog_id house_id dogname
1 0 Fido
2 0 Rover
3 1 Shep
4 1 Shep // FAIL, not unique in house 1
5 2 Shep // ok, allowed
6 2 Fido // FAIL, conflict with main house
如何创建对此建模的唯一性约束?
我在想有一种方法可以通过 exclusion 约束来实现,但我还没有想出方法。
我更喜欢使用约束而不是触发器来执行此操作,因为我也想在此表上执行更新插入,并且您只能使用带有约束的 ON CONFLICT。
答案 0 :(得分:0)
对于未来的访问者:我能解决这个问题的唯一方法是先查询有冲突的记录,然后只有在没有冲突的情况下才进行插入。如果您将两个命令都包装在一个事务中,这将起作用。我必须在应用程序中执行此操作,而不是在数据库级别执行此操作。不是理想的解决方案。