【问题标题】: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 hourPostgreSQL 是否有内置功能可以每分钟或每小时删除一次旧记录,例如删除所有超过 2 年的记录并每小时检查一次
【发布时间】:2020-04-29 16:04:52
【问题描述】:

Postgres 是否有任何功能来支持老化的旧记录?

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

【问题讨论】:

  • delete from the_table where create_at < current_timestamp - interval '2 years' 另一种选择是按时间戳列对表进行分区,然后删除分区。

标签: database postgresql sql-delete


【解决方案1】:

除了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 中的所有数据都会自动消失。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      相关资源
      最近更新 更多