S vaší aktuální strukturou nemůžete.
Cíl odkazu na cizí klíč musí být deklarován buď PRIMARY KEY nebo UNIQUE. Takže buď toto
CREATE TABLE foo (
id SERIAL PRIMARY KEY,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
UNIQUE (id, foo_created_on)
);
nebo toto
CREATE TABLE foo (
id SERIAL,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
PRIMARY KEY (id, foo_created_on),
UNIQUE (id)
);
bude fungovat jako cíl pro bar.foo_id. Pak by bar měl jednoduchý odkaz.
CREATE TABLE bar (
id SERIAL,
bar_created_on ABSTIME,
bar_deactivated_on ABSTIME,
foo_id REFERENCES foo (id),
PRIMARY KEY (id, bar_created_on)
);
Pokud chcete odkazovat na primární klíč, který jste původně deklarovali ve foo, musíte tento primární klíč uložit do baru. Musíte ji uložit celou, ne její část. Takže bez úpravy foo můžete postavit bar jako tento.
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)
);