如何将指定分区表的特定分区快速复制为独立表
PostgreSQL分区数据迁移为独立表最优方案
针对你的场景,以下是两种符合要求的最优实现方式,可按需选择:
- 场景1:需要保留父表中该分区的原有数据,仅复制生成分立表
最快的单条命令是使用带UNLOGGED优化的CTAS(CREATE TABLE AS SELECT),跳过WAL日志写入大幅提升写入速度,同时可以选择完全复刻原分区的表结构、约束、索引:-- 仅复制字段结构+数据,速度最快 CREATE UNLOGGED TABLE independent_table AS SELECT * FROM dec_partition; -- 完全复刻原分区的约束、索引、默认值等属性,同时复制数据 CREATE UNLOGGED TABLE independent_table (LIKE dec_partition INCLUDING ALL) AS SELECT * FROM dec_partition;注意:UNLOGGED表在数据库异常崩溃后数据会自动清空,如果需要持久化存储,执行完上述命令后再运行
ALTER TABLE independent_table SET LOGGED;即可转为普通持久化表。400万行含jsonb字段的数据集使用该命令通常10秒内即可完成。 - 场景2:不需要保留父表中该分区的访问入口,或允许后续重新挂载分区
这个场景下完全不需要拷贝数据,仅修改元数据即可毫秒级完成,单条命令如下:
执行完成后ALTER TABLE parent DETACH PARTITION dec_partition;dec_partition直接成为独立表,所有数据不变。如果后续需要恢复父表对该分区的访问,再执行挂载命令即可(同样是秒级完成):ALTER TABLE parent ATTACH PARTITION dec_partition FOR VALUES FROM '2021-02-12' to '2021-03-12';
内容的提问来源于stack exchange,提问作者Sai Ram
相关产品推荐
相关产品推荐

