Eu tenho a seguinte reservations
tabela PG (12)
id uuid
reservable_id uuid
reserved_between tsrange
Como posso garantir que não haja 2 reservas para a mesma reservable_id
sobreposta?
Um UNIQUE INDEX "simples" em reservable_id
, reserved_between
funciona apenas (como esperado) apenas com intervalos iguais.
Você precisa da
btree_gist
extensão para poder criar um índice GiST em umuuid
:Agora você pode criar uma restrição de exclusão:
&&
é o operador “overlaps” para intervalos.