gpt4 book ai didi

sql - Postgres - 'time without time zone' 范围和排除约束

转载 作者:行者123 更新时间:2023-11-29 12:08:55 26 4
gpt4 key购买 nike

我有下表:

create table booking (
identifier integer not null primary key,
room uuid not null,
start_time time without time zone not null,
end_time time without time zone not null
);

我想创建一个exclude constraint 来强制同一房间没有重叠预约。

我尝试了以下方法:

alter table booking add constraint overlapping_times
exclude using gist
(
cast(room as text) with =,
period(start_time, end_time) with &&)
);

这有两个问题:

  • room 转换为 text 是不够的,它会给出:错误:数据类型 text 没有访问方法“gist”的默认运算符类。我知道在 v10 中有 btree_gist,但我使用的是 v9.5 和 v9.6,所以我必须手动将 uuid 转换为 text afaik。

  • period(...) 是错误的,但我不知道如何构造 time without time zone 类型的范围。

最佳答案

installing 之后btree_gist ,您可以执行以下操作:

create type timerange as range (subtype = time);

alter table booking add constraint overlapping_times
exclude using gist
(
(room::text) with =,
timerange(start_time, end_time) with &&
);

如果您想在约束中使用表达式,则需要将其放入括号中。所以 (room::text)(cast(room as text))

关于sql - Postgres - 'time without time zone' 范围和排除约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47120170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com