暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL exclude 排他约束 实现 - group ID结伴功能

digoal 2021-01-02
751

作者

digoal

日期

2021-02-09

标签

PostgreSQL , 排他 , excluding , GiST


背景

A组和B组结伴了, 就不能再和其他组结伴.

每个组内有成员ID, 每个成员ID对应一条记录. 同时将组ID列入字段中.

约束: A组和B组结伴了, 就不能再和其他组结伴.

```
create extension btree_gist;

create table t_ins (
id1 int, -- 结伴ID1
id2 int, -- 结伴ID2
x text,
exclude using gist (id1 with =, id2 with <>)
);

insert into t_ins values (1,1,random()::Text);
insert into t_ins values (1,1,random()::Text);
insert into t_ins values (1,2,random()::Text);

insert into t_ins values (3,2,random()::Text);
ERROR: 23P01: conflicting key value violates exclusion constraint "t_ins_id1_id2_excl"
DETAIL: Key (id1, id2)=(1, 2) conflicts with existing key (id1, id2)=(1, 1).
SCHEMA NAME: public
TABLE NAME: t_ins
CONSTRAINT NAME: t_ins_id1_id2_excl
LOCATION: check_exclusion_or_unique_constraint, execIndexing.c:839

insert into t_ins values (3,2,random()::Text);
insert into t_ins values (3,2,random()::Text);
```

文档

https://www.postgresql.org/docs/13/sql-createtable.html#SQL-CREATETABLE-EXCLUDE

202102/20210208_03.md 《用 PostgreSQL 的排他约束实现 - 行政区不可跨界 约束, 会议室预定时间不交叉 约束 等.》
201911/20191128_01.md 《PostgreSQL 约束延判(unique, primary key, foreign key, exclude) - deferrable》
201905/20190527_01.md 《PostgreSQL exclude 约束之 - 绑定一对一的关系》
201712/20171223_02.md 《会议室预定系统实践(解放开发) - PostgreSQL tsrange(时间范围类型) + 排他约束》

PostgreSQL 许愿链接

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

9.9元购买3个月阿里云RDS PostgreSQL实例

PostgreSQL 解决方案集合

德哥 / digoal's github - 公益是一辈子的事.

digoal's wechat

文章转载自digoal,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论