Fea*_*rUs 1 sql postgresql postgresql-9.2
我正在 Postgres 中开发一个 PL 函数,并在其中根据某种逻辑修改表的记录,然后我执行最终查询(基本上是计数),如果我得到的数字是正数,我会抛出一个异常回滚事务(因为 PostgreSQL 的函数不明确支持事务)。
那么这是模拟交易的好方法吗?你有更好的建议吗?
PS:我正在使用 PostgreSQL 9.2,但我很快就会迁移到 9.3,如果这可能有帮助的话。
如果您希望在函数内中止事务,那么是的,引发异常是一个不错的选择。
您可以通过在函数中使用BEGIN ... EXCEPTION块来在PL/PgSQL 函数中使用子事务。使用内部BEGIN ... EXCEPTION块并在其中RAISE使用用户定义的 SQLSTATE 异常。捕获EXCEPTION块中的异常。
块中的RAISE(ofERROR或更高)BEGIN ... EXCEPTION将回滚该块内完成的工作,就像您使用了SAVEPOINTand 一样ROLLBACK TO SAVEPOINT。
函数不能强制回滚顶级事务;如果RAISE出现异常,外部 pl/pgsql 函数可以在BEGIN ... EXCEPTION块中捕获异常,或者客户端可以使用ROLLBACK TO SAVEPOINT.
| 归档时间: |
|
| 查看次数: |
1869 次 |
| 最近记录: |