如何在postgres中执行全局异常处理程序?

时间:2017-10-04 07:25:40

标签: postgresql plpgsql postgresql-9.3 postgresql-9.4

我在postgres中有搜索异常处理程序,它说要添加

DECLARE
  text_var1 text;
  text_var2 text;
  text_var3 text;
BEGIN
  -- some processing which might cause an exception
  ...
EXCEPTION WHEN OTHERS THEN
  GET STACKED DIAGNOSTICS text_var1 = MESSAGE_TEXT,
                          text_var2 = PG_EXCEPTION_DETAIL,
                          text_var3 = PG_EXCEPTION_HINT;
-- call a function which log all this variable perform log_function (text_var1 ,text_var2 , text_var3 );
END;

如果我为每个功能都这样做有效吗?

这种做法缺乏表现吗?

我们不能为所有函数都有一个全局异常处理程序吗?在这种方法中,我为每个函数添加了异常处理程序。

然后将它们保存在变量中并保存日志。我们可以为此设置任何全局错误处理程序吗?

修改

我必须将postgres中的所有异常记录到表中。我正在执行这一步。

1)在所有函数中写入GET STACKED块(如果我有20个函数,那么我在所有函数中写这个块)

2)然后在表格中记录。

我想要的是postgres中应该有全局异常处理程序的机制,所以我不得不在postgres中为所有函数编写GET STACKED EXCEPTION块

1 个答案:

答案 0 :(得分:1)

在PL / pgSQL块中使用EXCEPTION子句会对性能产生负面影响;请参阅the documentation of error trapping中的“提示”。

无法自动处理PL / pgSQL函数中的所有顶级异常。

我的建议是,您不会在数据库功能中记录错误,而是从应用程序中记录错误。例如,当您的事务回滚时,日志将会消失。