postgresql Postgres要点排除时间范围,除非id是特定值

cnh2zyt3  于 2022-11-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(121)

我正在尝试提出一个表结构,以禁止为给定社区同时创建2个事件,除非该社区为“admin”且id为1。我们的业务逻辑是“每个社区一次只能有1个事件,但管理员可以根据需要创建任意多个重叠事件”
到目前为止,我已经有了这个表,它非常简单,但是我无法找到一个约束来将“all except this”添加到该表中

CREATE TABLE community_event (
    community_id integer,
    event_start timestamptz,
    event_end timestamptz,
    canceled boolean DEFAULT false,
    EXCLUDE USING gist (
        community_id WITH =, tstzrange(event_start, event_end) WITH &&
    ) WHERE (not canceled)
);

我如何将此要求添加到它?

neskvpey

neskvpey1#

好的,我实际上已经很接近了。只需要在WHERE子句中添加条件。

CREATE TABLE community_event (
    community_id integer,
    event_start timestamptz,
    event_end timestamptz,
    canceled boolean DEFAULT false,
    EXCLUDE USING gist (
        community_id WITH =, tstzrange(event_start, event_end) WITH &&
    ) WHERE (not canceled AND community_id != 1)
);

相关问题