部分约束 EXCLUDE USING 要点

partial constraint EXCLUDE USING gist

我有以下约束:

ALTER TABLE my_table
  ADD CONSTRAINT no_overlap EXCLUDE USING gist (
    product_id WITH =,
    applicable_period WITH &&
  )

现在我意识到,这只应该有条件地检查,例如

ALTER TABLE my_table
  ADD CONSTRAINT no_overlap EXCLUDE USING gist (
    product_id WITH =,
    applicable_period WITH &&
  )
  WHERE my_table.user_id IS NULL

这可能吗,否则我怎么能以 efficient/advised 的方式实现呢? (我可以添加一个触发器,但我希望有更多 elegant/efficient 方法)。

我应该使用 table 分区吗? 谢谢

According to the manual,你只需要括号:

ALTER TABLE my_table
  ADD CONSTRAINT no_overlap 
  EXCLUDE USING gist (product_id WITH =, applicable_period WITH &&)
WHERE (user_id is null);