繁体   English   中英

Postgres 跨列的多个值的唯一约束

[英]Postgres unique constraint across multiple values of a column

我的一张桌子有一个棘手的唯一性要求。

假设我们有一桌狗。 狗住在房子里。

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

如何创建一个对此建模的唯一性约束?

我在想有一种方法可以通过排除约束来做到这一点,但我还没有弄清楚怎么做。

我更喜欢使用约束而不是触发器来执行此操作,因为我还想在此表上进行更新插入,并且您只能使用带有约束的 ON CONFLICT。

对于未来的访问者:我能解决这个问题的唯一方法是先查询冲突记录,然后只有在没有冲突的情况下才进行插入。 如果您将两个命令都包装在事务中,则此方法有效。 我必须在应用程序中执行此操作,而不是在数据库级别。 不是一个理想的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM