Med din nuvarande struktur kan du inte.
Målet för en främmande nyckelreferens måste deklareras antingen PRIMÄRNYCKEL eller UNIK. Så antingen detta
CREATE TABLE foo (
id SERIAL PRIMARY KEY,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
UNIQUE (id, foo_created_on)
);
eller det här
CREATE TABLE foo (
id SERIAL,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
PRIMARY KEY (id, foo_created_on),
UNIQUE (id)
);
skulle fungera som ett mål för bar.foo_id. Då skulle bar ha en enkel referens.
CREATE TABLE bar (
id SERIAL,
bar_created_on ABSTIME,
bar_deactivated_on ABSTIME,
foo_id REFERENCES foo (id),
PRIMARY KEY (id, bar_created_on)
);
Om du vill referera till den primärnyckel som du ursprungligen deklarerade i foo, måste du lagra den primärnyckeln i bar. Du måste lagra allt, inte en del av det. Så utan att modifiera foo kan du bygga bar så här.
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)
);