PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

problema de integridade de relação 'um para muitos' para intervalos de tempo


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!