Przy obecnej strukturze nie możesz.
Cel odwołania do klucza obcego musi być zadeklarowany jako PRIMARY KEY lub UNIQUE. Więc albo to
CREATE TABLE foo (
id SERIAL PRIMARY KEY,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
UNIQUE (id, foo_created_on)
);
lub to
CREATE TABLE foo (
id SERIAL,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
PRIMARY KEY (id, foo_created_on),
UNIQUE (id)
);
działałby jako cel dla bar.foo_id. Wtedy pasek miałby proste odniesienie.
CREATE TABLE bar (
id SERIAL,
bar_created_on ABSTIME,
bar_deactivated_on ABSTIME,
foo_id REFERENCES foo (id),
PRIMARY KEY (id, bar_created_on)
);
Jeśli chcesz odwołać się do klucza podstawowego, który pierwotnie zadeklarowałeś w foo, musisz przechowywać ten klucz podstawowy w bar. Musisz przechowywać wszystko, a nie część. Więc bez modyfikowania foo, możesz zbudować taki pasek.
CREATE TABLE bar (
id SERIAL,
bar_created_on ABSTIME,
bar_deactivated_on ABSTIME,
foo_id INTEGER NOT NULL,
foo_created_on ABSTIME NOT NULL,
FOREIGN KEY (foo_id, foo_created_on) REFERENCES foo (id, foo_created_on),
PRIMARY KEY (id, bar_created_on)
);