Olhando para a documentação do postgres para alter table , parece que as restrições regulares podem ser marcadas como DEFERRABLE
(mais concretamente, INITIALLY DEFERRED
, que é o que me interessa).
Os índices também podem ser associados a uma restrição, desde que:
O índice não pode ter colunas de expressão nem ser um índice parcial
O que me leva a acreditar que atualmente não há como ter um índice único com condições, como:
CREATE UNIQUE INDEX unique_booking
ON public.booking
USING btree
(check_in, check_out)
WHERE booking_status = 1;
Ser INITIALLY DEFERRED
, ou seja, que a 'restrição' de exclusividade só será verificada ao final da transação (se SET CONSTRAINTS ALL DEFERRED;
for utilizada).
Minha suposição está correta e, em caso afirmativo, existe alguma maneira de alcançar o comportamento pretendido?
Obrigado