Postgresql是否滚动删除旧行?

Postgresql是否滚动删除旧行?,postgresql,Postgresql,我想删除我的表中超过7天的行。最好的方法是什么?要创建每晚运行的cron作业,或者PostgreSQL是否内置了执行类似操作的功能?安排DB作业的最简单方法(对我来说)是创建一个cron作业,该作业使用psql执行SQL脚本 您可以阅读关于psql。使用-f或-c将SQL命令传递给psql 另外,编写一个PL/pgSQL函数来完成您的工作,并使用SELECT my_function()从psql调用它可能更容易从\u表中删除 其中时间戳

我想删除我的表中超过7天的行。最好的方法是什么?要创建每晚运行的cron作业,或者PostgreSQL是否内置了执行类似操作的功能?

安排DB作业的最简单方法(对我来说)是创建一个cron作业,该作业使用
psql
执行SQL脚本

您可以阅读关于
psql
。使用
-f
-c
将SQL命令传递给
psql

另外,编写一个PL/pgSQL函数来完成您的工作,并使用
SELECT my_function()从
psql
调用它可能更容易

从\u表中删除
其中时间戳
PostgreSQL目前没有内置的类似于cron的功能,因此我将使用系统的cron运行合适的delete语句。如果时间戳列上已经有了btree索引,那么最好比每晚更频繁地运行delete,一次删除小块。如果您没有索引,那么在非高峰时段每晚运行它会更好


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

行中有时间戳吗?行中有时间戳。为什么要删除数据,为什么不只是查询数据?如果你每夜运行一次作业,那么在作业运行之前,你会有将近八天的数据——为什么不每小时或每分钟运行一次呢?@Josh我可以查询一下,但是数据将不再被使用,它将只适合我的数据库大小,并且会进行备份,恢复需要更长的时间。因为我不知道我的服务器在删除过程中会有多少性能下降,所以我每晚都要运行。如果表很大,考虑把分区添加到问题表()中。它将允许您非常快速地删除旧记录,并避免表膨胀。
delete from the_table
where the_timestamp < now() - interval '7 days'