Sql Postgres:回滚前保存临时表中的行

Sql Postgres:回滚前保存临时表中的行,sql,postgresql,logging,transactions,rollback,Sql,Postgresql,Logging,Transactions,Rollback,我有一个主过程(p_proc_a),在这个过程中我创建了用于日志记录的临时表(tmp_log)。在main过程中,我调用一些其他过程(p_proc_b,p_proc_c)。在所有这些过程中,我都将数据插入tmp_日志表。 在回滚前执行exeption时,如何将tmp_日志中的行保存到物理表(log)中 create procedure p_proc_a language plpgsql as $body$ begin create temp table tmp_log (log_messa

我有一个主过程(p_proc_a),在这个过程中我创建了用于日志记录的临时表(tmp_log)。在main过程中,我调用一些其他过程(p_proc_b,p_proc_c)。在所有这些过程中,我都将数据插入tmp_日志表。 在回滚前执行exeption时,如何将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的更改的工作循环


谢谢你的建议。

这在PostgreSQL中是不可能的


典型的解决方法是连接到数据库本身,并通过dblink写入日志。

谢谢您的提示。我为每个过程使用json(inout)参数进行变通。