Можно ли создать FK для таблицы, разделенной по диапазону дат в PG12?
Представьте, что у меня есть большая таблица user_session
и event
таблица с FK:
create table user_session( -- BIG TABLE to be partitioned
id bigserial primary key,
created_at timestamptz not null default now(),
some_info text
);
create table event(
id bigserial primary key,
user_id bigint references user_session (id), -- FK
data text
);
Первая идея состояла в том, чтобы создать новую схему, подобную этой:
create table user_session(
id bigserial primary key,
created_at timestamptz not null default now(),
some_info text
) PARTITION BY RANGE (created_at);
Но это не получается с ошибкой: Detail: PRIMARY KEY constraint on table "user_session" lacks column "created_at" which is part of the partition key.
Хорошо, давайте создадим PK с двумя столбцами:
create table user_session(
id bigserial,
created_at timestamptz not null default now(),
some_info text,
primary key (id, created_at)
) PARTITION BY RANGE (created_at);
Однако теперь я не могу создать таблицу event
: [42830] ERROR: there is no unique constraint matching given keys for referenced table "user_session"
. Я также не могу создать уникальное ограничение вручную.
В большинстве статей Postgres есть код без PK на многораздельной таблице:
create table user_session(
id bigserial,
created_at timestamptz not null default now(),
some_info text,
) PARTITION BY RANGE (created_at);
Однако теперь я не могу создать event
таблица: [42830] ERROR: there is no unique constraint matching given keys for referenced table "user_session"
Как правильно это сделать?