如何防止 int 范围重叠
How to prevent overlapping of int ranges
我有一个 table 如下:
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, start_mn, end_mn) VALUES('2020-08-08', 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
,而不是整数。
我有一个 table 如下:
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, start_mn, end_mn) VALUES('2020-08-08', 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
,而不是整数。