Postgresql 匿名任务锁定
每当有人请求运行BIRT报告的新任务集时,我想显示表中的5个任务行。条件是,一旦显示任务,则同一任务在接下来的X秒内无法再次显示 样本数据:Postgresql 匿名任务锁定,postgresql,birt,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 inser
/*
-- 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报告时,情况就不一样了。这也不适用于。在这两种工具中,始终只显示前5行。要执行此操作,必须将数据源的&AutoCommit属性设置为true
在BIRT Designer 4.2.2和相关的BIRT查看器中工作您在报告中的何处添加了此项?我的直觉是,它可能在第一次生成报告时只被调用一次。@venite我将其作为标准数据集添加,使用JDBC连接到PostgreSQL,将sql直接粘贴到查询窗口中。每次我在报表查看器中单击“刷新”时,都会对查询进行计算。我通过将now列添加到数据集中来验证这一点,它在