現在の構造ではできません。
外部キー参照のターゲットは、PRIMARYKEYまたはUNIQUEのいずれかで宣言する必要があります。だからこれ
CREATE TABLE foo (
id SERIAL PRIMARY KEY,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
UNIQUE (id, foo_created_on)
);
またはこれ
CREATE TABLE foo (
id SERIAL,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
PRIMARY KEY (id, foo_created_on),
UNIQUE (id)
);
bar.foo_idのターゲットとして機能します。その場合、バーには簡単な参照があります。
CREATE TABLE bar (
id SERIAL,
bar_created_on ABSTIME,
bar_deactivated_on ABSTIME,
foo_id REFERENCES foo (id),
PRIMARY KEY (id, bar_created_on)
);
fooで最初に宣言した主キーを参照する場合は、その主キーをbarに格納する必要があります。一部ではなく、すべてを保存する必要があります。したがって、fooを変更せずに、このようなバーを作成できます。
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)
);