首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postgres记录中重叠间隔的约束

postgres记录中重叠间隔的约束
EN

Stack Overflow用户
提问于 2020-08-08 06:31:40
回答 1查看 122关注 0票数 0

所以我正在做一个预订系统,我有一个预订的表格。

代码语言:javascript
复制
CREATE TABLE reservations (
    user_id INT REFERENCES users (id),
    booth_number INT REFERENCES booths (booth_number),
    starts DATE NOT NULL,
    ends DATE NOT NULL,
    PRIMARY KEY (user_id, booth_number)
);

我想知道是否有可能在数据库级别上设置一个限制,禁止在同一展位上插入重叠的预订?

e.g

代码语言:javascript
复制
INSERT INTO reservations( user_id, booth_number, starts, ends)
VALUES 
(1, 0, CURRENT_DATE, CURRENT_DATE + 7),
(2, 0, CURRENT_DATE + 4, CURRENT_DATE + 9),
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-08 06:35:19

几乎确切的场景(房间而不是展位)在文档中:

https://www.postgresql.org/docs/current/rangetypes.html#RANGETYPES-CONSTRAINT

您可以使用btree_gist扩展在普通标量数据类型上定义排除约束,然后可以将这些约束与范围排除组合在一起,以获得最大的灵活性。例如,安装btree_gist后,只有当会议室编号相等时,以下约束才会拒绝重叠的范围:

代码语言:javascript
复制
CREATE EXTENSION btree_gist;
CREATE TABLE room_reservation (
    room text,
    during tsrange,
    EXCLUDE USING GIST (room WITH =, during WITH &&)
);

要修改以供使用,请执行以下操作:

代码语言:javascript
复制
EXCLUDE USING GIST (booth_number WITH =, daterange(starts, ends, '[]') WITH &&))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63309918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档