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

问题描述:

我在Postgres的搜索异常处理程序,它说添加如何在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堆积块(如果我有20功能然后我在所有功能写块)

2)比表然后登录。

我要的是应该有机制在Postgres的全局异常处理程序,所以我根本不写得到的Postgres STACKED EXCEPTION块的所有功能

+1

yes - 你可以记录错误记录并使用csv日志格式将其导入到表格中 - 我认为这是捕捉所有异常的意思方式 –

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

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

我的建议是,您不会记录数据库功能中的错误,而是从应用程序中记录错误。首先,当你的交易回滚时,日志将会消失。

+0

代码是样本当前处理异常的方式。对于当前的过程,我必须在所有函数中编写该块。我们可以通过postgres中的全局处理程序来做到这一点吗? –

+0

我在编辑部分添加了更多信息和用例。 –