Con la tua struttura attuale, non puoi.
La destinazione di un riferimento di chiave esterna deve essere dichiarata PRIMARY KEY o UNIQUE. Quindi o questo
CREATE TABLE foo (
id SERIAL PRIMARY KEY,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
UNIQUE (id, foo_created_on)
);
o questo
CREATE TABLE foo (
id SERIAL,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
PRIMARY KEY (id, foo_created_on),
UNIQUE (id)
);
funzionerebbe come target per bar.foo_id. Quindi la barra avrebbe un semplice riferimento.
CREATE TABLE bar (
id SERIAL,
bar_created_on ABSTIME,
bar_deactivated_on ABSTIME,
foo_id REFERENCES foo (id),
PRIMARY KEY (id, bar_created_on)
);
Se vuoi fare riferimento alla chiave primaria che hai originariamente dichiarato in foo, devi memorizzare quella chiave primaria in bar. Devi archiviare tutto, non parte di esso. Quindi, senza modificare foo, potresti creare una barra come questa.
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)
);