我需要确保我的数据库只包含其中两个或更多列是唯一的条目。UNIQUE
这可以通过对这些列的约束轻松实现。
就我而言,我只需要禁止重叠时间范围的重复。该表有valid_from
和valid_to
列。在某些情况下,可能首先需要通过设置使活动条目过期valid_to = now
,然后插入一个调整为valid_from = now
and的新条目valid_to = infinity
。
我似乎可以在没有任何问题的情况下使先前的条目过期UPDATE
,但是插入新条目似乎很麻烦,因为我的基列当前是UNIQUE
,因此无法再次添加。
我想添加valid_from
andvalid_to
作为UNIQUE
约束的一部分,但这只会使约束更加松散,并允许存在重复和重叠的时间范围。
如何进行约束以确保不存在重叠的重复项valid_from
和valid_to
tsrange
?
我似乎在寻找EXCLUDE USING GIST
,但它似乎不支持多列?这似乎对我不起作用:
ALTER TABLE registration
DROP Constraint IF EXISTS registration_{string.Join('_', listOfAttributes)}_key,
ADD Constraint registration_{string.Join('_', listOfAttributes)}_key EXCLUDE USING GIST({string.Join(',', listOfAttributes)} WITH =, valid WITH &&);