我是 Postgresql 的新手,所以我不想为一些基本任务创建自己的结构....
我的任务是创建函数并在某些情况下抛出异常(RAISE EXCEPTION 'test'
),以便客户端捕获它或在未正确处理它的情况下重新抛出。问题是在抛出之前我想将异常记录到数据库中的特殊表中,但意识到抛出错误是回滚之前所做的更改!有什么方法可以改变这种行为或我所能做的一切——添加一些 CODE 输出参数并根据该 CODE 在客户端上抛出错误?我现在使用的示例代码:
CREATE OR REPLACE FUNCTION fn_...()
...
BEGIN
IF nretry_count >= nmax_retry
THEN
INSERT INTO log VALUES (error_type, value) VALUES (1,'Max retry exceeded!');
RAISE EXCEPTION 'Max retry count exceeded';
END IF;
END
$$ LANGUAGE plpgsql;
最佳答案
您可以开始交易并设置 SAVEPOINT
在你的应用程序中。然后,在捕获到异常之后,您 ROLLBACK TO SAVEPOINT
, 创建日志条目并 COMMIT
。
无法从函数内部抛出异常并执行不回滚的数据修改,因为在 PostgreSQL 中没有“自主事务”。
关于postgresql - 在 postgresql 函数中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42198649/