Crear un indice único con un rango de fechas para que no exista un registro en el mismo rango de fecha y hora en postgresql es muy sencillo, lo explicaremos un ejemplo:

Imaginemos que tenemos un calendario de citas medicos con la estructura:

id_medicoInt
fecha_inicialtimestamp
fecha_finaltimestamp

Lo que queremos lograr es que no se permita para él mismo id_medico un registro que este sobrepuesto sobre otro usando el rango de fecha. Es decir:

suponiendo que ya tenemos un registro para el ID = 1 con la fecha inicial =  2021-04-22 08:00:00 y fecha final = 2021-04-22 10:00:00 y queremos insertar un nuevo registro para el mismo ID medico con fecha inicial =  2021-04-22 07:00:00 y fecha final =2021-04-22 09:00:00 no debería permitir el INSERT, para lograr esto solo debemos crear un indice único usando  EXCLUDE y tsrange de postgresql con la siguiente sentencia: 

ALTER TABLE [NOMBRE_TABLA] ADD CONSTRAINT [NOMBRE_INDICE]
EXCLUDE USING GIST (id_medico WITH =, tsrange(fecha_inicial, fecha_final) WITH &&)

Debes tener la extensión btree_gist instalada, si no la tienes puedes instalarla con el siguiente código:

CREATE EXTENSION IF NOT EXISTS btree_gist;

Recursos

Te comparto un ejemplo funcional de esta publicación

Postgres 14
``` status 2 rows affected ```
dbfiddle.uk
Postgres 14