如何解决如何防止int范围重叠
我有一张桌子,如下所示:
CREATE TABLE appointments (
id SERIAL PRIMARY KEY,date TIMESTAMP NOT NULL,start_mn INT NOT NULL,end_mn INT NOT NULL,EXCLUDE using gist((array[start_mn,end_mn]) WITH &&)
)
我想防止行之间的start_mn和end_mn重叠,所以我添加了要点排除:
EXCLUDE using gist((array[start_mn,end_mn]) WITH &&)
但是插入以下两个不会触发排除:
INSERT INTO appointments(date,start_mn,end_mn) VALUES('2020-08-08',100,200);
INSERT INTO appointments(date,90,105);
如何实现此排除?
解决方法
如果要防止重叠的 range ,则必须使用range type而不是数组。
我还假定开始和结束在同一天绝对不能重叠,因此您需要在排除约束中包括date
列:
CREATE TABLE appointments
(
id SERIAL PRIMARY KEY,date TIMESTAMP NOT NULL,start_mn INT NOT NULL,end_mn INT NOT NULL,EXCLUDE using gist( int4range(start_mn,end_mn,'[]') WITH &&,"date" with =)
)
如果start_mn
和end_mn
应该是“一天中的时间”,那么这些列应定义为time
,而不是整数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。