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

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

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

【问题讨论】:

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

标签: postgresql


【解决方案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');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2020-07-25
    • 2018-08-24
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多