我想删除一张超过7天的桌子上的行。做这个的最好方式是什么?制作一个每晚运行的cron作业,或者PostgreSQL内置了哪些功能来做这样的事情?
答案 0 :(得分:20)
delete from the_table
where the_timestamp < now() - interval '7 days'
答案 1 :(得分:2)
安排数据库作业的最简单方法是创建一个使用psql
执行SQL脚本的cron作业。
Here
您可以阅读psql
。使用-f
或-c
将SQL命令传递给psql
。
编写PL / pgSQL函数也可能更容易,这可以帮助您完成工作并使用psql
从SELECT my_function();
调用它
答案 2 :(得分:2)
PostgreSQL目前没有内置的类似cron的功能,因此我使用系统的cron来运行合适的删除语句。如果你已经在timestamp列上有一个btree索引,你也可以比每晚更频繁地运行删除,一次取出一小块。如果您没有索引,那么在非高峰时段每晚运行它会更好。
如果这些没有您需要的性能,您可以尝试分区。但我会这样做是最后的手段,而不是第一手段。