超越静态分区:使用pg_partman实现时间自动滚动
大多数分区教程止步于CREATE TABLE PARTITION OF,本教程深入pg_partman扩展,展示如何自动化创建未来分区、清理过期分区以及处理分区键的时区与夏令时问题。 · 难度:入门 · +10XP
超越静态分区:使用pg_partman实现时间自动滚动
手动管理数百个时间分区会令人崩溃。pg_partman是PostgreSQL生态中最成熟的分区管理扩展,支持基于时间、序列的自动分区创建和保留策略。本教程将演示安装pg_partman后,如何创建分区集(partition set)、设置自动生成提前N个分区以及自动删除超过保留期的老分区。还会重点解决时间分区中的边界陷阱(例如夏令时导致一天25小时或23小时),以及如何通过premake参数应对突发写入高峰。最后讲解如何将现有大表无损转换为分区表(使用PG12+的原生分区交换)。
-- 创建分区集
SELECT partman.create_parent(
p_parent_table := 'public.events',
p_control := 'created_at',
p_type := 'native',
p_interval := '1 day',
p_premake := 30
);
-- 设置自动清理30天前的分区
UPDATE partman.part_config SET retention = '30 days', retention_keep_table = false;
SELECT partman.run_maintenance();