Keith Fiske:使用 pg_partman 在 Postgres 中实现自动归档和数据保留管理

Keith Fiske:使用 pg_partman 在 Postgres 中实现自动归档和数据保留管理

💡 原文英文,约1800词,阅读约需7分钟。
📝

内容提要

通过智能的数据保留策略,每月节省数据库成本。分区可自动归档超过30天的旧数据。pg_partman是Postgres的分区扩展,提供了管理时间和整数分区的简单方法。最新版本pg_partman 5.1包括了新功能,如单值整数的列表分区、控制维护运行顺序以及对数值分区的实验性支持。此外,该版本还包括了一些错误修复。

🔎

延伸解读

分区归档为何优于直接删除

在PostgreSQL中,直接删除大量数据并不会立即将空间归还给文件系统,除非满足特定条件(如关系末尾的页面完全清空,或执行VACUUM FULL/CLUSTER并独占锁定)。而通过分区,只需DROP旧分区表,操作几乎瞬时完成,并立即释放空间,避免了低效删除和锁表问题。

保留策略的默认安全设计

pg_partman的retention_keep_table选项默认为true,这意味着即使分区超出保留期,子表仍会保留在数据库中,只是不再属于分区集。这种设计旨在减少意外数据丢失的风险。若需真正删除表,可将其设为false;若只想释放索引空间,可保持表但设置retention_keep_index为false。

利用retention_schema实现离线备份

通过设置retention_schema,pg_partman会将过期的子表从分区集中分离并移动到指定模式,而不是直接删除。之后可使用pg_partman提供的Python脚本(如dump_partition.py)将这些表导出为自定义格式的转储文件,并生成SHA-512哈希用于长期完整性校验,适合需要保留历史数据但不在线存储的场景。

❓

Q&A

pg_partman的主要功能是什么?

pg_partman是Postgres的分区扩展,提供了管理时间和整数分区的简单方法。

如何使用pg_partman实现数据的自动归档?

通过时间分区,pg_partman可以自动归档超过30天的旧数据,简化数据库维护。

pg_partman 5.1版本新增了哪些功能?

pg_partman 5.1版本新增了单值整数的列表分区、维护运行顺序控制和数值分区的实验性支持。

如何设置pg_partman的保留选项?

可以通过更新part_config表中的retention列来设置保留选项,以控制旧表的保留和删除。

使用pg_partman删除旧数据的效率如何?

使用分区可以更简单地移除旧数据,删除操作几乎是瞬时的,并立即将空间返回给文件系统。

如何将旧表移至指定模式以备份?

可以使用retention_schema选项将旧表移至指定模式,以便进行备份。

🏷️

标签

➡️

继续阅读