Với cấu trúc hiện tại của bạn, bạn không thể.
Đích của một tham chiếu khóa ngoại phải được khai báo là CHÍNH hoặc DUY NHẤT. Vì vậy, một trong hai điều này
CREATE TABLE foo (
id SERIAL PRIMARY KEY,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
UNIQUE (id, foo_created_on)
);
hoặc cái này
CREATE TABLE foo (
id SERIAL,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
PRIMARY KEY (id, foo_created_on),
UNIQUE (id)
);
sẽ hoạt động như một mục tiêu cho bar.foo_id. Sau đó, thanh sẽ có một tham chiếu đơn giản.
CREATE TABLE bar (
id SERIAL,
bar_created_on ABSTIME,
bar_deactivated_on ABSTIME,
foo_id REFERENCES foo (id),
PRIMARY KEY (id, bar_created_on)
);
Nếu bạn muốn tham chiếu đến khóa chính mà bạn đã khai báo ban đầu trong foo, bạn phải lưu khóa chính đó trong thanh. Bạn phải lưu trữ tất cả, không phải một phần của nó. Vì vậy, không cần sửa đổi foo, bạn có thể tạo thanh như thế này.
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)
);