删除 5 分钟间隔内的所有条目,但阻止间隔开始和结束时的条目

问题描述 投票:0回答:1

我有一个 400GB 的表,每 2 秒就会添加一个新条目。该表保存微芯片的事件状态。我有一个created_at日期时间字段和一个主题字符串字段来确定事件状态。我现在的任务是删除从第一个空闲条目开始的 5 分钟间隔内的所有空闲事件。

例如:

id 创建于 主题
UUIDv4 2022-03-13 12:42:16 MAC 地址1/空闲
UUIDv4 2022-03-13 12:42:18 MAC 地址1/空闲
UUIDv4 2022-03-13 12:42:20 MAC 地址1/空闲
UUIDv4 2022-03-13 12:42:16 MAC 地址2/空闲
UUIDv4 2022-03-13 12:42:18 MAC 地址2/空闲
UUIDv4 2022-03-13 12:42:20 MAC 地址2/空闲
... ... ...
UUIDv4 2022-03-13 12:47:16 MAC 地址1/空闲
UUIDv4 2022-03-13 12:47:18 MAC 地址1/空闲
UUIDv4 2022-03-13 12:47:16 MAC 地址2/空闲
UUIDv4 2022-03-13 12:47:18 MAC 地址2/空闲

如果我从 2022-03-13 12:42:16 开始获取 MAC-ADDRESS1,我需要 2022-03-13 12:42:16 和 2022-03-13 12:47:16 的条目。必须删除这台 Mac 的这两个日期之间的所有条目。然后我从 2022-03-13 12:47:16 开始,转到 2022-03-13 12:52:16 并删除这两者之间的所有条目。我需要对每个芯片执行此操作(约 1842 年)。

我用 PHP 构建了一个脚本,但这太慢了。现在,我想构建一个查询来直接在 PostgreSQL 中执行它。

这可能吗?如果可以,查询需要如何进行?

sql postgresql sql-delete
1个回答
1
投票

您可以创建一个每 5 分钟执行一次的过程

DELETE FROM <TABLE> 
WHERE createdAt >= @yourDate AND createAt <= @yourDate + interval '5 minute'

比使用 procedureName('2022-03-13 12:42:16')

对于作业调度:https://www.pgadmin.org/docs/pgadmin4/development/pgagent.html

© www.soinside.com 2019 - 2024. All rights reserved.