Postgres函数日志记录并引发异常

时间:2018-10-22 23:23:48

标签: postgresql exception-handling plpgsql

我想捕获引发的错误,将一些与该错误相关的信息记录到表(INSERT ErrorLog ...)中,并将错误引发回调用方。我不希望回滚记录的信息,如何我能做到吗?我们正在运行Postgres 8.3版

DECLARE
  text_var1 text;
  text_var2 text;
  text_var3 text;

INSERT INTO mytab(firstname, lastname) VALUES('Tom', 'Jones');
BEGIN
    UPDATE mytab SET firstname = 'Joe' WHERE lastname = 'Jones';
    x := x + 1;
    y := x / 0;
EXCEPTION WHEN OTHERS THEN
 GET STACKED DIAGNOSTICS text_var1 = MESSAGE_TEXT,
                          text_var2 = PG_EXCEPTION_DETAIL,
                          text_var3 = PG_EXCEPTION_HINT;
    INSERT ErrorLog(message, detail) values(text_var1, text_var2);
    RAISE EXCEPTION 'Error Occured %\n%', text_var1, text_var2;
    RETURN x;
END;

1 个答案:

答案 0 :(得分:0)

这是不可能的,因为您引发的异常(在捕获另一个异常之后)会回滚事务,因此也会termGroup.name块中的INSERT进行回滚。这样,该函数也不会返回任何内容。

解决方法包括: