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

awf*_*020 1 database postgresql sql-delete

Postgres 有支持老化旧记录的功能吗?

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

Lau*_*lbe 7

除了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';
Run Code Online (Sandbox Code Playgroud)

视图很简单INSERT,你可以UPDATE直接DELETE在上面;不需要触发器。

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

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

  • 这并不能解决问题。通常删除旧数据是因为它有性能成本,而这个解决方案只是隐藏了问题 (3认同)
  • @omidh 我的回答是:“偶尔,你会启动清理工作。” 当然,您最终希望摆脱数据,但如果您不必一直立即这样做,那么对性能来说是有好处的。 (3认同)