PostgreSQL plpgsql try catch 块等效
Posted
技术标签:
【中文标题】PostgreSQL plpgsql try catch 块等效【英文标题】:PostgreSQL plpgsql try catch block equivalent 【发布时间】:2018-08-17 18:12:13 【问题描述】:我使用的是 PostgreSQL 9.6。
我在 sql server 中有一个 PROCEDURE
。这利用了try catch
块。它看起来有点像下面的代码:
BEGIN TRANSACTION
BEGIN TRY
--do stuff here
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
--do error stuff here
END CATCH
在做一些研究后,似乎 postgres 没有使用try catch
。有没有办法像 sql server 一样在 postgres 中处理这个问题?
【问题讨论】:
在 PL/pgSQL 中是BEGIN ... EXCEPTION ... END
。但是你不能在函数中提交。
所以所有函数都自动提交?
否;每个函数都在单个事务中运行(当然,多个函数可以在同一个事务中运行,但您不能在函数内部提交或回滚)。 PostgreSQL v11 改变了这一点。
postgresql.org/docs/current/…
从stack exchange database admins看到这个答案
【参考方案1】:
回调可以处理潜在的错误:
https://www.postgresql.org/docs/9.4/static/ecpg-errors.html
【讨论】:
以上是关于PostgreSQL plpgsql try catch 块等效的主要内容,如果未能解决你的问题,请参考以下文章
Postgresql - 从 plpgsql 函数返回记录 []
如何在 PostgreSQL 9.2 中分析 plpgsql 函数