Postgres中的旧记录自动老化(删除)


15

Postgres是否具有支持过期旧记录的功能?

我想使用Postgres进行日志记录,作为一种队列,其中会自动删除两个星期以上的记录(日志事件)。


使用分区。仅删除记录不会减小磁盘上的表大小。
sivann 2015年

@sivann您的建议不是假设他的问题是磁盘大小吗?如果他的问题是查询执行时间,那么删除似乎是比分区更简单的答案,不是吗?(仍然试图自己理解这一点)
stephenmm

1
问题很简单,经过一定时间后,日志记录不再有趣。删除旧行应为新的行留出空间。
罗勒·布尔克

Answers:


15

没有内置的功能可以根据时间(我会知道)自动删除行。

您可以每天运行(确定)cron-job来安排简单的DELETE命令或为此目的使用pgAgent

或者,您可以将分区从主表继承的每周分区一起使用,让我们对其进行调用log。这将使删除非常便宜:只需保留最近的两个星期并删除较旧的分区即可。

在主表上创建一个RULE或一个TRIGGER,以根据系统时间将INSERT重定向到当前星期的分区。始终登录到主表log。提前创建子表。提前几周确定一下,并运行每周一次的cron工作,以添加将来的子表...

手册中代码示例
使用plpgsql函数自动创建表的相关答案:

相关解决方案重新创建一个RULE重定向INSERT。触发函数可以动态写入当前分区...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.