E per "timestamp" sembri intendere un certo periodo di tempo .
Un vincolo di esclusione
su un tipo di intervallo
, combinato con l'uguaglianza su barid
(utilizzando il modulo aggiuntivo btree_gist
) sarebbe la soluzione perfetta.
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 &&)
);
Ciò richiede Postgres 9.2 o successivo.
Correlati:
Il manuale ha un esempio di codice corrispondente!