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
重定向插入。触发器函数可以动态写入当前分区...