コンテンツにスキップ

PostgreSQL のパーティショニング

──効果が出る条件と向かないケース

宣言的パーティショニングの仕組み(PostgreSQL 10+)

-- 親テーブル(パーティション定義)
CREATE TABLE logs (
    id          bigint,
    logged_at   timestamptz NOT NULL,
    message     text,
    PRIMARY KEY (id, logged_at)          -- パーティションキーを含める必要あり
) PARTITION BY RANGE (logged_at);

-- 子パーティション
CREATE TABLE logs_2025 PARTITION OF logs
    FOR VALUES FROM ('2025-01-01') TO ('2026-01-01');
CREATE TABLE logs_2026 PARTITION OF logs
    FOR VALUES FROM ('2026-01-01') TO ('2027-01-01');

主な恩恵: パーティションプルーニング

WHERE 句にパーティションキーの条件があると、該当しないパーティションが自動的に除外され走査量が激減する。

(図: SVG)