用語集のすべての用語

テーブルパーティショニング

PostgreSQL のテーブルパーティショニングとは?

パーティショニングは、1 つの論理テーブルを範囲、リスト、ハッシュによって小さな物理テーブルに分割するため、クエリやメンテナンスは必要なパーティションだけを対象にできます。

宣言的パーティショニングでは、PARTITION BY でパーティションテーブルを作成し、キーの範囲、値のリスト、またはハッシュバケットをそれぞれ保持するパーティションを追加します。アプリケーションは親テーブルに対して読み書きを行い、PostgreSQL が各行を適切なパーティションに振り分けます。

パーティションプルーニングにより、オプティマイザはクエリの WHERE 句に一致しえないパーティションをスキップできます。パーティショニングを使うと古いデータの除去も低コストになり、パーティションを DROP または DETACH するほうが、その行を 1 行ずつ削除するよりもはるかに高速です。通常、効果が現れるのは、パーティショニングしなければ非常に大きくなるテーブルの場合だけです。

例

この例では、月ごとの範囲パーティションを作成し、11 月の行について EXPLAIN で確認します。プルーニングによって 10 月のパーティションがスキップされたため、出力には measurements_2026_11 だけが表示されます。

CREATE TABLE measurements (
  taken_on date NOT NULL,
  value numeric
) PARTITION BY RANGE (taken_on);

CREATE TABLE measurements_2026_10 PARTITION OF measurements
  FOR VALUES FROM ('2026-10-01') TO ('2026-11-01');
CREATE TABLE measurements_2026_11 PARTITION OF measurements
  FOR VALUES FROM ('2026-11-01') TO ('2026-12-01');

INSERT INTO measurements VALUES ('2026-10-15', 1.5), ('2026-11-02', 2.5);

EXPLAIN SELECT * FROM measurements WHERE taken_on >= '2026-11-01';

拡張機能なしの標準の PostgreSQL 16 または 17 で動くプレーンな SQL です。破棄してかまわない空のデータベースで実行してください。

出典

PostgreSQL 公式ドキュメント(英語)。

関連用語