sql - 如何使数据库在行上的特定时间后删除一行?
问题描述
我正在做一个关于在地图上报告情况的项目。每个报告都在地图上用一个大头针标记。该pin
表有一个属性 ,report_time
它保存了插入图钉(或制作报告)的时间。
自报告后 15 分钟后,如何创建函数/触发器/程序(无论是最佳选择)以删除该行?report_time
如果 15 分钟过去了,我想在我的数据库中获取并删除该行。
解决方案
与其不断删除行,不如只使用视图?
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';
这个解决方案的优雅之处在于用户永远不会在表中看到不适当的行,即使作业没有按计划运行或表由于某种原因被锁定以进行更新。
推荐阅读
- c# - 如何使用 UWP C# 备份 USB 中的所有文件夹和文件?
- apache-kafka - 在 Confluent Sink Connector 中使用 AvroConverter 时的奇怪行为
- .net-core - 如何为单个解决方案中存在的多个 Azure 函数应用程序(v3)项目生成合并的 swagger 文档
- python - 使用 xlwings 复制工作表中的过滤数据
- c# - 可以使用 .net 应用程序加密数据,然后使用数据库功能解密吗?
- node.js - 如何在猫鼬子文档的子文档中添加文档
- php - Docker php 8 nginx 配置
- typo3 - Typo3 TCA 覆盖:将字段添加到插件面板
- javascript - NuxtJS 和 Vue2 我可以为 Recaptcha 编写服务器端代码吗?
- ethereum - Solidity 中 require(send()) 的安全问题