我有一个 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 中执行它。
这可能吗?如果可以,查询需要如何进行?
您可以创建一个每 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