Sql 将列插入到postgres间隔中

Sql 将列插入到postgres间隔中,sql,postgresql,Sql,Postgresql,我有一个Postgresql表,用于存储有关计划进程的信息,包括进程最后一次执行的时间。不同的流程对运行频率有不同的要求 我提取了需要重新运行的进程列表,如下所示: SELECT * FROM processes WHERE last_run < now() - interval '2 hours' SELECT * FROM processes WHERE last_run < now() - interval exec_interval || ' minutes' 但这会引发

我有一个Postgresql表,用于存储有关计划进程的信息,包括进程最后一次执行的时间。不同的流程对运行频率有不同的要求

我提取了需要重新运行的进程列表,如下所示:

SELECT * FROM processes WHERE last_run < now() - interval '2 hours'
SELECT * FROM processes WHERE last_run < now() - interval exec_interval || ' minutes'

但这会引发语法错误。有没有一种公认的方法来处理这种情况?

最干净的方法可能是:

SELECT 
     * 
FROM 
    processes 
WHERE 
    last_run < now() - exec_interval * interval '1 minute' ;
这将允许一个良好的执行计划,例如:

| QUERY PLAN | | :----------------------------------------------------------------------------------------------------------------------------- | | Bitmap Heap Scan on processes (cost=1060.05..2799.58 rows=49001 width=16) (actual time=10.007..19.612 rows=49792 loops=1) | | Recheck Cond: ((last_run + ((exec_interval)::double precision * '00:01:00'::interval)) < now()) | | Heap Blocks: exact=637 | | -> Bitmap Index Scan on idx_next_run (cost=0.00..1047.80 rows=49001 width=0) (actual time=9.919..9.919 rows=49792 loops=1) | | Index Cond: ((last_run + ((exec_interval)::double precision * '00:01:00'::interval)) < now()) | | Planning time: 0.204 ms | | Execution time: 23.619 ms |
在dbfiddle上检查所有设置和一些小的变化,最干净的方法可能是:

SELECT 
     * 
FROM 
    processes 
WHERE 
    last_run < now() - exec_interval * interval '1 minute' ;
这将允许一个良好的执行计划,例如:

| QUERY PLAN | | :----------------------------------------------------------------------------------------------------------------------------- | | Bitmap Heap Scan on processes (cost=1060.05..2799.58 rows=49001 width=16) (actual time=10.007..19.612 rows=49792 loops=1) | | Recheck Cond: ((last_run + ((exec_interval)::double precision * '00:01:00'::interval)) < now()) | | Heap Blocks: exact=637 | | -> Bitmap Index Scan on idx_next_run (cost=0.00..1047.80 rows=49001 width=0) (actual time=9.919..9.919 rows=49792 loops=1) | | Index Cond: ((last_run + ((exec_interval)::double precision * '00:01:00'::interval)) < now()) | | Planning time: 0.204 ms | | Execution time: 23.619 ms |
检查dbfiddle上的所有设置和一些小的变化

SELECT*来自上次运行