PostgreSQL如何查询自上次运行后已超过设定间隔的记录
PostgreSQL 间隔查询可行方案
你遇到的类型不兼容问题本质是需要将整数类型的分钟数转换为PostgreSQL支持的interval时间间隔类型,再和timestamptz类型的processed_at做运算,以下是可直接落地的方案:
可用查询方案
- 方案1:使用
make_interval函数(可读性最高,推荐)
SELECT * FROM 你的表名 -- 逻辑:上次处理时间 + 设定间隔 < 当前时间,说明已经超过间隔需要处理 WHERE processed_at < CURRENT_TIMESTAMP - make_interval(mins => frequency);
说明:将运算逻辑移到条件右侧是为了避免对左侧
processed_at字段做函数运算,可直接命中processed_at字段的索引,大数据量表下性能更好。
- 方案2:使用时间间隔乘法(写法更简洁)
SELECT * FROM 你的表名 WHERE processed_at < CURRENT_TIMESTAMP - frequency * INTERVAL '1 minute';
特殊场景处理
如果存在首次运行、processed_at为NULL的未处理记录,可通过COALESCE兼容:
SELECT * FROM 你的表名 WHERE COALESCE(processed_at, '1970-01-01'::timestamptz) < CURRENT_TIMESTAMP - make_interval(mins => frequency);
内容的提问来源于stack exchange,提问作者Petr Bělecký
相关产品推荐
相关产品推荐

