首页 > 解决方案 > 如何使数据库在行上的特定时间后删除一行?

问题描述

我正在做一个关于在地图上报告情况的项目。每个报告都在地图上用一个大头针标记。该pin表有一个属性 ,report_time它保存了插入图钉(或制作报告)的时间。

自报告后 15 分钟后,如何创建函数/触发器/程序(无论是最佳选择)以删除该行?report_time如果 15 分钟过去了,我想在我的数据库中获取并删除该行。

标签: sqlpostgresql

解决方案


与其不断删除行,不如只使用视图?

create view v_pin as
    select p.*
    from pin p
    where p.report_time > now() - interval '15 minute;

使用该视图的任何人都只会看到最近的行。

然后,当数据库处于静止状态或您需要时——比如每小时一次、每天一次或每周一次,只需安排一个作业来删除旧行:

delete from pin
    where report_time < now() - interval '15 minute';

这个解决方案的优雅之处在于用户永远不会在表中看到不适当的行,即使作业没有按计划运行或表由于某种原因被锁定以进行更新。


推荐阅读