-- The overlap exclusion constraint must not apply to cancelled reservations, -- so that a cancelled slot can be re-booked by another member. alter table public.reservations drop constraint no_overlapping_reservations; alter table public.reservations add constraint no_overlapping_reservations exclude using gist ( boat_id with =, tstzrange(start_time, end_time, '[)') with && ) where (status <> 'cancelled');