帶有條件語句的EXCLUDE約束

我在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'(不是零或兩)的條目。

? 最佳回答:

我想不出比添加生成的列更好的方法了:

ALTER TABLE place
   ADD col int4range GENERATED ALWAYS AS (
                        CASE WHEN type = 'zero' THEN INT4RANGE '[1,2]'
                             WHEN type = 'one'  THEN INT4RANGE '[1,1]'
                             WHEN type = 'two'  THEN INT4RANGE '[2,2]'
                        END
                     ) STORED
                     NOT NULL;

然后,您可以使用&&運算符在排除約束中使用該列。

主站蜘蛛池模板: 在线观看精品视频一区二区三区| 精品无人区一区二区三区在线| 一区二区三区视频在线观看| 无码人妻精一区二区三区| 精品国产一区二区三区2021| 亚洲国产AV无码一区二区三区| 大伊香蕉精品一区视频在线 | 伊人无码精品久久一区二区| 伊人久久大香线蕉av一区| 又紧又大又爽精品一区二区| 精品不卡一区二区| 亚洲一区二区三区亚瑟| 精品日韩亚洲AV无码一区二区三区| 99国产精品一区二区| 中文字幕在线观看一区二区| 性色AV 一区二区三区| www亚洲精品少妇裸乳一区二区| 日本韩国一区二区三区| 国产成人精品无码一区二区老年人 | 亚洲码欧美码一区二区三区 | 国产成人一区二区三区免费视频 | 一区二区在线观看视频| 久久亚洲一区二区| 色国产精品一区在线观看| 无码国产精品一区二区免费16| 亚洲AV无码一区二区三区系列| 国产免费一区二区视频| 中文字幕精品一区二区精品| 制服丝袜一区二区三区| 日韩精品在线一区二区| 奇米精品视频一区二区三区| 91精品福利一区二区三区野战| 美女毛片一区二区三区四区| 精品不卡一区二区| 国产激情一区二区三区在线观看 | 国产午夜精品一区二区三区小说| aⅴ一区二区三区无卡无码| 综合无码一区二区三区| 末成年女A∨片一区二区| 国产香蕉一区二区三区在线视频| 福利片福利一区二区三区|