The check is correct and still wrong. Between your select and your insert another request runs the same select and also sees no conflict. Both inserts succeed. It only shows up under load, which is why you see it on Sunday evenings.
Let the database decide instead of your code:
create extension if not exists btree_gist;
alter table bookings add column during tstzrange
generated always as (tstzrange(starts_at, ends_at, '[)')) stored;
alter table bookings add constraint no_overlap
exclude using gist (wheel_id with =, during with &&);Now the second insert fails with a unique violation no matter how the requests interleave. Catch code 23P01 and show "that slot just went". Keep your pre-check for the nice error message, but stop trusting it.