DBAtlas · データベース運用アトラス

pg_partmanでパーティションの作成と保存期間管理を自動化

PostgreSQLパーティション化

コマンド

CREATE SCHEMA partman;
CREATE EXTENSION pg_partman SCHEMA partman;

CREATE TABLE public.measurements (
  id    bigint GENERATED ALWAYS AS IDENTITY,
  ts    timestamptz NOT NULL,
  value numeric,
  PRIMARY KEY (id, ts)
) PARTITION BY RANGE (ts);

-- Daily partitions, pre-create 7 days ahead (pg_partman 5.x syntax)
SELECT partman.create_parent(
  p_parent_table := 'public.measurements',
  p_control      := 'ts',
  p_interval     := '1 day',
  p_premake      := 7
);

-- Drop partitions older than 30 days
UPDATE partman.part_config
   SET retention = '30 days',
       retention_keep_table = false
 WHERE parent_table = 'public.measurements';

-- Maintenance: run periodically (schedule with pg_cron or pg_partman_bgw)
CALL partman.run_maintenance_proc();

-- Any rows in the default partition?
SELECT * FROM partman.check_default(p_exact_count := true);

概要

親表をpg_partmanに登録する。将来のパーティションを事前作成し、保存期間を過ぎたものを削除し、デフォルトパーティションに入った行を報告する。

使用する場面

日次/月次のパーティションを手作業や独自スクリプトで管理する代わりに、標準的で監視可能な自動化が必要なとき(ログ、メトリック、イベントの表)。

注意

pg_partman 4.xと5.xの間でAPIが変更された: 5.xではp_typeは'range'/'list'のみを受け付け(デフォルト'range')、4.xのp_type := 'native'は無効。インストール済みのバージョンをSELECT extversion FROM pg_extension WHERE extname = 'pg_partman';で確認する。create_parentはデフォルトでデフォルトパーティションも作成する。retention_keep_table = falseはパーティションを完全にDROPする。アーカイブが必要な場合はtrueのままにしてretention_schemaを使用する。run_maintenance_proc()がスケジュールされていない場合、新しいパーティションは作成されず、データはデフォルトに入る。pg_partman_bgwにはshared_preload_librariesと再起動が必要。

DBAtlas で開く →

関連項目