PostgreSQL:自动删除旧分区

Posted

技术标签:

【中文标题】PostgreSQL:自动删除旧分区【英文标题】:PostgreSQL: Automating deletion of old partitions 【发布时间】:2018-01-24 19:59:59 【问题描述】:

我正在使用 Imperial Wicket 的 PostgreSQL 精细自动分区功能http://imperialwicket.com/postgresql-automating-monthly-table-partitions/) 来创建每周分区来存储大量数据。数据库每周增长约 100GB,因此需要经常注意以确保服务器不会耗尽磁盘空间。

我已经搜索过 SO,但找不到任何解决方案来根据磁盘空间阈值或时间段自动删除表。是否有任何原生 PostgreSQL 解决方案或已开发的功能来自动删除旧分区,或者这是一种自行解决的问题?

【问题讨论】:

由于您按日期范围进行分区,您可能需要查看 pg_partman。它将能够根据您的需要半自动化,并具有许多用于分区管理的内置功能。 【参考方案1】:

这似乎是我自己解决的问题。由于我使用的是 Imperial Wicket 的自动表分区功能,因此我以它为基础开发了一个新功能,该功能可以删除早于指定日期的分区表。

代码可在https://github.com/stevbev/postgresql-drop-time-series-table-partitions获取

用法类似于 Imperial Wicket 的语法,并支持日/周/月/年分区方案。例如,要删除使用每周分区创建的名称为“my_table_name”且早于 180 天前的一周的表分区,请执行 SQL 语句:

SELECT public.drop_partitions(current_date-180, 'public', 'my_table_name', 5, 'week');

【讨论】:

以上是关于PostgreSQL:自动删除旧分区的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 存储:是不是可以自动删除旧文件?

有没有办法设置“过期”时间,之后在 PostgreSQL 中自动删除数据条目?

oracle 11g 分区表创建(自动按年分区)

postgresql数据库使用DELETE命令删除数据后,空间是不是立即自动释放?

有没有办法使用 bigquery API 删除分区表中的旧分区?

Linux系统磁盘分区删除分区格式化挂载卸载开机自动挂载的方法总结