postgresql - 在 postgresql 函数中抛出异常

标签 postgresql exception

我是 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/

相关文章:

postgresql - 将 "pg"gem 与 Rails 3 一起使用...为什么我在执行 "bundle install"时会在 Netbeans 中收到此错误?

Android WebView 内存不足?

json - postgres json_populate_recordset 没有按预期工作

postgresql - 如何使用 PGADMIN 9.6 在 postgreSQL 中只备份所有函数?

arrays - 如何将函数应用于 Postgres 中数组列的每个元素?

java - 是否有可能在 IntelliJ 中找到(可能)冗余的 try...catch block ?

exception - 捕捉导出(1);

java - 使用@WebFault 进行 JAX-WS 异常处理

python - Python 2.7 中的奇怪异常.SystemExit

PostgreSQL。优化从大表中检索不同的值