Postgres约束唯一的日期时间范围
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Postgres约束唯一的日期时间范围相关的知识,希望对你有一定的参考价值。
我的表有两列:
startsAt
endsAt
两者都保持日期和时间。我想制定以下约束:
如果两列都不是NULL,则startsAt和endsAt之间的范围不得与其他范围(来自其他行)重叠。
答案
您可以保留单独的timestamp
列,并仍然在表达式上使用exclusion constraint:
CREATE TABLE tbl (
tbl_id serial PRIMARY KEY
, starts_at timestamp
, ends_at timestamp
, EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&) -- no overlapping
);
Constructing a tsrange
value没有显式界限,因为tsrange(starts_at, ends_at)
自动采用默认界限:包括较低和排除较高的'[)'
,这通常是最好的。
有关:
Add constraint to existing table
ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)
语法细节与CREATE TABLE
相同。
以上是关于Postgres约束唯一的日期时间范围的主要内容,如果未能解决你的问题,请参考以下文章
冲突部分索引的 Postgres 唯一或排除约束无法更新票证