postgresql 自动分区
浏览: 60评论: 0发布时间: 2026-06-08
① 建分区父表(PG 原生语法,不是扩展)
CREATE TABLE IF NOT EXISTS public.表名 (
id int8 NOT NULL,
add_time timestamp NOT NULL DEFAULT now(),
PRIMARY KEY (id, add_time)
) PARTITION BY RANGE (add_time); -- ← 声明这是范围分区表
② ★pg_partman 扩展注册自动分区(核心,就这一句)
SELECT public.create_parent(
p_parent_table := 'public.device_online_and_offline_log',
p_control := 'add_time', -- 按哪一列分
p_type := 'native', -- PG 原生分区
p_interval := '1 month', -- 按月
p_premake := 4 -- 预建未来 4 个月
);
跑完这一句,pg_partman 就会:建好当前月 ±4 个月分区、建好 _default 兜底分区、把配置写进 part_config 表、并交给后台进程pg_partman_bgw 每小时自动维护。
迁移default表的数据到分区里面(也会自动创建不存在的分区)
CALL public.partition_data_proc(
p_parent_table := 'public.device_online_and_offline_log',
p_source_table := 'public.old_import', -- ← 直接从这张源表搬
p_interval := '1 month',
p_wait := 1
);