29

我想删除我的一张表上超过 7 天的行。做这个的最好方式是什么?做一个每天晚上运行的 cron 作业,或者 PostgreSQL 是否有内置功能来做这样的事情?

4

3 回答 3

52
delete from the_table
where the_timestamp < now() - interval '7 days'
于 2013-08-12T14:51:04.993 回答
4

PostgreSQL 目前没有内置的类似 cron 的功能,所以我会使用系统的 cron 来运行合适的删除语句。如果您已经在时间戳列上有一个 btree 索引,那么您最好比每晚更频繁地运行删除,一次取出小块。如果您没有索引,那么在非高峰时间每晚运行它会更好。

如果这些没有您需要的性能,您可以尝试分区。但我会这样做作为最后的手段,而不是第一手段。

于 2013-08-12T22:35:20.950 回答
3

(对我而言)安排 DB 作业的最简单方法是创建一个 cron 作业,该作业使用psql.

Here您可以阅读有关psql. 使用-f-c将 SQL 命令传递给psql.

此外,编写一个 PL/pgSQL 函数可能更容易,它可以完成你的工作并从中调用psqlSELECT my_function();

于 2013-08-12T14:48:24.343 回答