Показать результат шага pgAgent

Как настроить шаг pgAgent так Result или же Output показать количество строк, обработанных в моей функции?

моя функция уже возвращает количество затронутых строк, но это не значение, показанное в 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 ответ

Согласно исходному коду 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;
    
Другие вопросы по тегам