部分约束 EXCLUDE USING 要点

And*_*eko 3 postgresql constraints

我有以下限制:

ALTER TABLE my_table
  ADD CONSTRAINT no_overlap EXCLUDE USING gist (
    product_id WITH =,
    applicable_period WITH &&
  )
Run Code Online (Sandbox Code Playgroud)

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

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

这是否可能,否则我怎样才能以有效/建议的方式实现这一目标?(我可以添加一个触发器,但我希望有更优雅/有效的方法)。

我应该诉诸表分区吗?谢谢

小智 6

根据手册,你只需要括号:

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