【问题标题】:SQL timestamp for event constraint事件约束的 SQL 时间戳
【发布时间】:2018-03-27 00:55:54
【问题描述】:

我的任务是创建一个触发器,该触发器应该检查数据库设计中分配的约束。触发器应该检查新事件是否适合当前计划。两个事件不能同时发生。属性是事件的日期、时间和长度(时间)。现在我正在考虑用新事件的时间+长度检查事件中时间+长度的间隔值。如果它们重叠,则会引发异常。我的问题是我不知道如何实现它。

【问题讨论】:

  • 我们正在使用 postgres。

标签: sql postgresql triggers timestamp constraints


【解决方案1】:

在 Postgres 中,您可以使用 exclusion constraint 轻松完成此操作,无需触发器。

假设您的表格如下所示:

create table event 
(
   id serial primary key, 
   event_name varchar(100), 
   event_start timestamp, 
   duration interval
);

然后您可以使用以下约束来防止重叠事件:

alter table event
  add constraint no_overlapping_events
  exclude using gist (tsrange(event_start, event_start + duration) with &&);

约束定义中的tsrange() 创建一个timestamp range,可以有效地比较重叠行。

以下两次插入都会成功:

insert into event (event_name, event_start, duration)
values ('First', timestamp '2017-10-16 10:00:00', interval '2' hour);

insert into event (event_start, duration)
values ('Second', timestamp '2017-10-16 12:00:00', interval '4' hour);

但是,由于事件“第三”与事件“第二”重叠,以下插入将失败:

insert into event (event_start, duration)
values ('Third', timestamp '2017-10-16 12:00:00', interval '1' hour);

【讨论】:

    猜你喜欢
    • 2016-12-26
    • 2017-08-30
    • 1970-01-01
    • 2020-04-12
    • 2020-10-16
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多