Et par "horodatage", vous semblez vouloir dire une certaine période de temps .
Une contrainte d'exclusion
sur un type de plage
, combiné avec l'égalité sur barid
(en utilisant le module supplémentaire btree_gist
) serait la solution parfaite.
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 &&)
);
Cela nécessite Postgres 9.2 ou plus tard.
Connexe :
Le manuel contient un exemple de code correspondant !