Med din nuværende struktur kan du ikke.
Målet for en fremmednøglereference skal erklæres enten PRIMÆR NØGLE eller UNIK. Så enten dette
CREATE TABLE foo (
id SERIAL PRIMARY KEY,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
UNIQUE (id, foo_created_on)
);
eller dette
CREATE TABLE foo (
id SERIAL,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
PRIMARY KEY (id, foo_created_on),
UNIQUE (id)
);
ville fungere som et mål for bar.foo_id. Så ville bar have en simpel reference.
CREATE TABLE bar (
id SERIAL,
bar_created_on ABSTIME,
bar_deactivated_on ABSTIME,
foo_id REFERENCES foo (id),
PRIMARY KEY (id, bar_created_on)
);
Hvis du vil referere til den primære nøgle, du oprindeligt erklærede i foo, skal du gemme den primære nøgle i bar. Du skal gemme det hele, ikke en del af det. Så uden at ændre foo, kunne du bygge bar som denne.
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)
);