我在postgres中有一個包含以下列的位置表
id | idplace | date_slot | type
-----+---------+-------------------------+------------
1 | 360 | [2023-02-20,2023-02-27) | 'zero'
列類型只接受3個值(“0”、“1”或“2”)。我之前創(chuàng)建了一個約束,以排除任何與另一個相似的條目,并且可以工作。以下是要點限制
ALTER TABLE ONLY place ADD CONSTRAINT place_idplace_date_slot_excl1 EXCLUDE USING gist (idplace WITH =, type WITH =,date_slot WITH &&)
現(xiàn)在我想用以下規(guī)則修改它:
-如果列類型等于“零”,則不接受任何類似的條目。
-如果列類型等于“一”,則只接受另一個包含“二”的條目(不是零或一)。
-如果列類型等于'two',則只接受另一個包含'one'(不是零或兩)的條目。
我想不出比添加生成的列更好的方法了:
然后,您可以使用
&&
運算符在排除約束中使用該列。