1

PG12 で日付範囲によって分割されたテーブルに FK を作成することは可能ですか?

大きなテーブルuser_sessioneventFK を含むテーブルがあるとします。

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.

では、2 つの列を持つ 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"

これを行う正しい方法は何ですか?

4

0 に答える 0