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';
视图非常简单,您可以直接在其上INSERT
、UPDATE
和DELETE
;不需要触发器。
现在所有数据将在两年后自动从 visibledata
中消失。
有时您会启动一个清理作业,该作业只会删除所有超过两年的分区。
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';
视图非常简单,您可以直接在其上INSERT
、UPDATE
和DELETE
;不需要触发器。
现在所有数据将在两年后自动从 visibledata
中消失。
有时您会启动一个清理作业,该作业只会删除所有超过两年的分区。