Is there a way to represent a constraint, where i prevent date range overlaps, but only when a column equals a specific value? So i can have zero or many inactive, but only ever one active?
Im running into a problem where i need a gist constraint to check date range overlaps but only if a column equals a specific value (‘active’ in this case).
We have a table which has dates and there can be overlap, if a column equals a specific value (active can only ever have one, but inactive can be zero or many).
GIST seems to be able to say prevent any duplicate (2 active, but also excludes 1 active, 1 inactive, or inactive > 1).
Putting this in two constraints fails, because the gist only covers the range overlap and join id.
e.g.
ALTER TABLE "a_table" ADD CONSTRAINT "CHK_some_name" EXCLUDE USING gist ("a_join_id" WITH =, tstzrange("start_time", "end_time") WITH &&)
ALTER TABLE "a_table" ADD CONSTRAINT "CHK_some_name" EXCLUDE USING gist ("an_enum" with =, "a_join_id" WITH =, tstzrange("start_time", "end_time") WITH &&)
Any help/insight would be greatly appreciated