0
我想在每次有人请求新的任务集(运行BIRT报告)时从表中显示5个任务(行)。条件是一旦显示任务,则在接下来的X秒内不能再显示相同的任务。匿名任务锁定
的样本数据:
/*
-- drop table if exists task_list;
-- Create table for tasks
create table task_list (
id_task serial,
task_lock timestamp without time zone
);
-- Insert some tasks
insert into task_list select * from generate_series(1,100);
*/
为了达到要求的行为,我创建的查询与update
内CTE:
with
tasks as (
update task_list set task_lock = Now()
where
id_task in (select id_task
from task_list
where task_lock is null
or task_lock < (Now() - interval '30 seconds') limit 5)
returning *
)
select * from tasks;
这工作完全当我从pgAdmin的反复运行查询,而不是当我将此查询添加到BIRT报告。这在SQLFiddle中也不起作用。在这两种工具中,始终只显示前5行。
报告你在哪里添加此?我的直觉是它只被调用一次(可能是在第一次生成报告时)。 – venite
@venite我添加了这个标准的数据集(直接粘贴SQL到查询窗口),使用JDBC连接到PostgreSQL。每当我在报告查看器中进行刷新时,都会对查询进行评估。我通过在数据集中添加'now()'列来验证这一点 - 它在[SQLFiddle](http://sqlfiddle.com/#!15/dfb45/5)中的工作方式相同, –