Postgres: сохранить строки из временной таблицы перед откатом

У меня есть основная процедура (p_proc_a), в которой я создаю временную таблицу для ведения журнала (tmp_log). В основной процедуре я вызываю некоторые другие процедуры (p_proc_b, p_proc_c). В каждой из этих процедур я вставляю данные в таблицу tmp_log. Как сохранить строки из tmp_log в физическую таблицу (лог) в случае исключения перед откатом?

create procedure p_proc_a
language plpgsql
as $body$
begin

  create temp table tmp_log (log_message text) on commit drop;

  call p_proc_b();
  call p_proc_c();

  insert into log (log_message) 
  select log_message from tmp_log;

  exception
    when others then
      begin
        get stacked diagnostics
          v_message_text = message_text;

        insert into log (log_message)
        values(v_message_text);
      end;
end;
  $body$

Есть ли обходной путь для сохранения журналов в таблицу и отката изменений из p_proc_b и p_proc_c?

Спасибо за любой совет.


person Milan Labanc    schedule 23.12.2020    source источник


Ответы (1)


Это невозможно в PostgreSQL.

Типичным обходным решением является использование dblink для подключения к самой базе данных и записи логи через dblink.

person Laurenz Albe    schedule 23.12.2020
comment
Спасибо за подсказку. Я делаю обходной путь, используя параметр json (inout) для каждой процедуры. - person Milan Labanc; 30.12.2020