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

Bas*_*que 20 postgresql delete queue

Postgres 是否有任何功能来支持老化的旧记录?

我想使用 Postgres 进行日志记录,作为一种队列,其中超过两周的记录(日志事件)会被自动删除。

Erw*_*ter 19

没有内置功能可以在基于时间的制度(我知道)上自动删除行。

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

或者您可以将分区与每周分区一起使用。这使得删除非常便宜:只需保留最近两周并删除旧分区。

在 Postgres 10 之前,分区总是基于继承。新的声明式分区有很多优点,并且在每个版本中都得到进一步改进。不过,继承仍然提供了一项关键优势。手册:

某些操作在使用声明式分区时需要比使用表继承时更强的锁。例如,在分区表中添加或删除分区需要 ACCESS EXCLUSIVE在父表上SHARE UPDATE EXCLUSIVE加锁,而在常规继承的情况下,锁就足够了。

意思是,添加或删除一个分区不会干扰其他分区的读取者和写入者继承,而所有内容都被声明性分区(通过父表时)阻止。不过,这是一个非常快的操作。

通过继承,创建从“主”表继承的分区,我们称之为log。在主表上创建 aRULE或 a TRIGGER,根据系统时间将 INSERT 重定向到当前周的分区。

无论哪种方式,您始终可以登录到主表log。提前创建分区。提前几周确保并运行每周一次的 cron 作业,以添加未来的子表......

手册中有用于继承声明性分区的代码示例.

使用 plpgsql 函数自动创建继承表的相关答案:

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