防止日期重叠postgresql

Prevent date overlap postgresql

有没有办法向 postgresql table 添加约束以防止日期重叠?例如,我有一个名为 workouts 的 table,它具有日期列 week_startweek_end。我想确保 week_start - week_end 范围中的 none 与任何现有范围重叠。但是,week_start 的结束日期可以与 week_end 的开始日期重叠。

有人可以帮忙吗?

提前致谢!

您可以使用 exclusion constraint, using the overlap operator (&&) for the daterange type:

CREATE TABLE workouts (
  week_start DATE,
  week_end DATE,
  EXCLUDE USING gist (daterange(week_start, week_end) WITH &&)
)

您可以将 EXCLUDE table 约束添加到 table 定义中,然后使用范围来检测重叠。如果您可以更改 table 定义以将列 week_startweek_end 变成一个范围,这将非常有用,比如 weeks.

CREATE TABLE workouts (
  ...
  weeks   intrange
  EXCLUDE USING gist (weeks WITH &&)
);