PostgreSQL 是否有内置功能,可以每分钟或每小时删除一次旧记录,例如删除所有超过 2 年的记录并每小时检查一次

Does PostgreSQL have a built in feature to delete old records every minute or hour, like delete all records older than 2 years and check every hour

Postgres 有支持aging-out旧记录的功能吗?

如标题所说,我想删除所有超过 2 年的记录,并让它每隔几分钟或几小时检查一次。我看到很多年前的帖子都说不,但也许情况已经改变了。

答案是否定的:事情并没有因此改变。

除了good answer on DBA Stack Exchange,让我补充一下:

没有必要每隔几分钟就删除一次行。相反,您将它们从查询中隐藏起来。

举个简单的例子:

CREATE TABLE realdata (
   id bigint PRIMARY KEY,
   payload text,
   create_time timestamp with time zone DEFAULT current_timestamp NOT NULL
) PARTITION BY RANGE (create_time);

CREATE VIEW visibledata AS
   SELECT * FROM realdata
   WHERE create_time > current_timestamp - INTERVAL '2 years';

视图非常简单,您可以直接在其上INSERTUPDATEDELETE;不需要触发器。

现在所有数据将在两年后自动从 visibledata 中消失。

有时您会启动一个清理作业,该作业只会删除所有超过两年的分区。