匿名任务锁定

时间:2014-01-29 13:34:36

标签: postgresql birt

每当有人请求新的任务集(运行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);
*/

为了实现所需的行为,我在CTE中使用update创建了查询:

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行。

1 个答案:

答案 0 :(得分:0)

要完成这项工作,您必须将数据源的&AutoCommit属性设置为true

适用于BIRT Designer 4.2.2和相关的BIRT Viewer