1

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

在此处输入图像描述

我的函数已经返回了受影响的行数,但这不是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;
4

1 回答 1

0

根据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 存储作业步骤执行的最后一个错误。

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

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

    CREATE OR REPLACE FUNCTION test_output() RETURNS VOID AS $$
       DECLARE
         rows int := 25;
       BEGIN
         RAISE EXCEPTION 'Updated rows: %', rows;
       END;
    $$ LANGUAGE PLPGSQL;
    
于 2017-01-20T06:40:29.393 回答