显示pgAgent步骤的结果

时间:2016-07-21 21:10:21

标签: postgresql pgagent

如何设置pgAgent步骤ResultOutput显示我的函数处理的行数?

enter image description here

我的函数已经返回受影响的行数,但这不是Result中显示的值。

BEGIN   
    WHILE  int_pending > 0  LOOP    
        .....  
        UPDATE table SET ....   
        GET DIAGNOSTICS int_row_count = ROW_COUNT;
        int_total = int_total + int_row_count;    
    END LOOP;

    RETURN int_total;           
END;

1 个答案:

答案 0 :(得分:0)

根据source code of pgagent

output = stepConn->GetLastError();

...

rc = threadConn->ExecuteVoid(
         wxT("UPDATE pgagent.pga_jobsteplog ")
         wxT("   SET jslduration = now() - jslstart, ")
         wxT("       jslresult = ") + NumToStr(rc) + wxT(", jslstatus = '") + stepstatus + wxT("', ")
         wxT("       jsloutput = ") + threadConn->qtDbString(output) + wxT(" ")
         wxT(" WHERE jslid=") + jslid);

pgagent存储作业步骤执行的最后一个错误。

因此,有两种方法可以实现所需的行为:

  • 修补源代码以实现您的功能,重新编译,安装和使用此自定义版本
  • 在plpgsql函数中使用RAISE EXCEPTION,如下所示:

    CREATE OR REPLACE FUNCTION test_output() RETURNS VOID AS $$
       DECLARE
         rows int := 25;
       BEGIN
         RAISE EXCEPTION 'Updated rows: %', rows;
       END;
    $$ LANGUAGE PLPGSQL;