将 PostgreSQL EXCLUDE 范围约束与 UNIQUE 约束相结合

2023-12-28

在 PostgreSQL 中,如何将范围列上的排除约束与其他标量列上的唯一约束结合起来。或者换句话说,如何确保范围重叠检查仅与其他列上的唯一检查结合使用?

例如,假设我有:

CREATE TABLE reservation (
    restaurant_id int,
    time_range tsrange
);

我想确保对于每个restaurant_id,没有重叠time_ranges.

我知道我可以创建一个独占范围约束,如下所示:

CREATE TABLE reservation (
    restaurant_id int,
    time_range tsrange EXCLUDE USING gist (time_range WITH &&)
);

但我如何确保time_range检查范围为restaurant_id?


CREATE TABLE reservation 
(
    restaurant_id int,
    time_range tsrange,
    EXCLUDE USING gist (restaurant_id with =, time_range WITH &&)
);

注意需要安装扩展btree_gist因为GIST索引默认没有相等运算符:

http://www.postgresql.org/docs/current/static/btree-gist.html http://www.postgresql.org/docs/current/static/btree-gist.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 PostgreSQL EXCLUDE 范围约束与 UNIQUE 约束相结合 的相关文章

随机推荐