E por "timestamp" você parece querer dizer um certo período de tempo .
Uma restrição de exclusão em um tipo de intervalo , combinado com igualdade em
barid
(utilizando o módulo adicional btree_gist
) seria a solução perfeita. CREATE EXTENSION btree_gist; -- needed once per database
CREATE TABLE foo (
fooid serial PRIMARY KEY
, barid integer NOT NULL REFERENCES bar(barid)
, bazid integer NOT NULL REFERENCES baz(bazid)
, time_range tsrange NOT NULL -- replaces startdate & enddate
, EXCLUDE USING gist (barid WITH =, time_range WITH &&)
);
Isso requer o Postgres 9.2 ou mais tarde.
Relacionado:
O manual tem um exemplo de código correspondente!