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)