如何在 postgres 中执行全局异常处理程序?
How to do global exception handler in 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 中出现的所有异常记录到 table 中。我正在执行此步骤。
1) 在所有函数中写入 GET STACKED 块(如果我有 20 个函数,那么我在所有函数中写入此块)
2) 然后登录 table.
我想要的是 postgres 中应该有全局异常处理程序的机制,这样我就不必在 postgres 中为所有函数编写 GET STACKED EXCEPTION 块
在 PL/pgSQL 块中使用 EXCEPTION
子句会对性能产生负面影响;请参阅 the documentation of error trapping 中的“提示”。
无法自动处理 PL/pgSQL 函数中的所有顶级异常。
我的建议是不要记录数据库函数中的错误,而是记录应用程序中的错误。其一,当您的事务回滚时,日志将消失。
我在 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 中出现的所有异常记录到 table 中。我正在执行此步骤。
1) 在所有函数中写入 GET STACKED 块(如果我有 20 个函数,那么我在所有函数中写入此块)
2) 然后登录 table.
我想要的是 postgres 中应该有全局异常处理程序的机制,这样我就不必在 postgres 中为所有函数编写 GET STACKED EXCEPTION 块
在 PL/pgSQL 块中使用 EXCEPTION
子句会对性能产生负面影响;请参阅 the documentation of error trapping 中的“提示”。
无法自动处理 PL/pgSQL 函数中的所有顶级异常。
我的建议是不要记录数据库函数中的错误,而是记录应用程序中的错误。其一,当您的事务回滚时,日志将消失。