С настоящата ви структура не можете.
Целта на препратката към външен ключ трябва да бъде декларирана като PRIMARY KEY или UNIQUE. Така че или това
CREATE TABLE foo (
id SERIAL PRIMARY KEY,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
UNIQUE (id, foo_created_on)
);
или това
CREATE TABLE foo (
id SERIAL,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
PRIMARY KEY (id, foo_created_on),
UNIQUE (id)
);
ще работи като цел за bar.foo_id. Тогава лентата ще има проста препратка.
CREATE TABLE bar (
id SERIAL,
bar_created_on ABSTIME,
bar_deactivated_on ABSTIME,
foo_id REFERENCES foo (id),
PRIMARY KEY (id, bar_created_on)
);
Ако искате да препратите към първичния ключ, който първоначално сте декларирали във foo, трябва да съхраните този първичен ключ в bar. Трябва да съхранявате всичко, а не част от него. Така че без да модифицирате foo, можете да изградите лента като тази.
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)
);