【发布时间】:2020-12-23 14:26:21
【问题描述】:
我有一个主程序 (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 回滚更改?
感谢您的建议。
【问题讨论】:
标签: sql postgresql logging transactions rollback