我有两个表,其中包含分类的tsrange值。每个表中的范围每个类别不重叠,但b中的范围可能与a中的范围重叠。key, category int, period tsrange );复杂的是,在一个重叠的b.period包含在一个a.period中的情况下,减法的结果是两行。Postgres Range -运算符不支持这一点,因此我创建了一个函数,它将返回1或2行:
c
在我们内部构建的软件中,我们可以接受start_time TIMESTAMP和end_time TIMESTAMP NULL,以确保策略的有效性。这里的重要问题是,结束日期也可以是空的,这意味着除非显式结束,否则策略可以在无限时间内生效。在堆栈溢出方面,我很少看到解决方案,但它们要么不是基于SQL的,要么是提供给end_time NOT NULL的。我们希望确保当我们添加新策略时,它不会与现有策略重叠。CREATE TABLE public.policies id uuid,
start_time timestamp without time