Dengan struktur Anda saat ini, Anda tidak bisa.
Target referensi kunci asing harus dideklarasikan sebagai KUNCI UTAMA atau UNIK. Jadi begini
CREATE TABLE foo (
id SERIAL PRIMARY KEY,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
UNIQUE (id, foo_created_on)
);
atau ini
CREATE TABLE foo (
id SERIAL,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
PRIMARY KEY (id, foo_created_on),
UNIQUE (id)
);
akan berfungsi sebagai target untuk bar.foo_id. Maka bar akan memiliki referensi sederhana.
CREATE TABLE bar (
id SERIAL,
bar_created_on ABSTIME,
bar_deactivated_on ABSTIME,
foo_id REFERENCES foo (id),
PRIMARY KEY (id, bar_created_on)
);
Jika Anda ingin mereferensikan kunci utama yang semula Anda nyatakan di foo, Anda harus menyimpan kunci utama itu di bilah. Anda harus menyimpan semuanya, bukan sebagian. Jadi tanpa memodifikasi foo, Anda dapat membuat bilah seperti ini.
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)
);