我是Postgresql新手,所以我不想为一些基本任务创建自己的结构。。。。
我的任务是在某些情况下创建函数并抛出异常(RAISE EXCEPTION 'test'
),以便客户端捕获它,或者在处理不正确时重新抛出。问题是,在抛出之前,我想将异常记录到数据库中的特殊表中,但意识到抛出错误是回滚之前所做的更改!是否有任何方法可以更改此行为或我所能做的一切-添加一些代码输出参数并基于该代码向客户端抛出错误?我现在使用的示例代码:
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
。
无法从函数内部引发异常并执行未回滚的数据修改,因为PostgreSQL中没有“自主事务”。
关于postgresql - 在Postgresql函数中引发异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42198649/