Postgres在未来的交易中返回错误

时间:2015-11-16 15:51:30

标签: postgresql

我目前正在使用pgbouncer为我的连接池从MySQL迁移到postgres。

我们选择/插入/更新/删除来自postgres的大量数据,所有数据都来自远程来源,因此我们尝试在插入之前尽可能提高数据质量,但有时会出现一些不良数据。

这会导致postgres报告current transaction is aborted, commands ignored until end of transaction block

这很好,除了通过pgbouncer的连接将为每个查询报告此错误。如果我直接连接到postgres而不是pgbouncer,我会得到相同的逻辑。我希望它能够回滚导致此问题的任何交易。

有没有办法只是回滚并继续正常工作?我读过的所有内容都说明了修改查询,但在这种情况下并不总是可行。

1 个答案:

答案 0 :(得分:3)

您需要使用ROLLBACK命令。这将撤消自上次BEGIN TRANSACTIONSTART TRANSACTION以来的所有内容。请注意,事务不会嵌套;如果你在没有提交的情况下开始多个交易,这将回滚最外面的交易。

这将使您进入自动提交模式。您可能希望发出新的BEGIN TRANSACTION命令来打开新事务。

如果你有错误之前的保存点,你也应该能够ROLLBACK TO SAVEPOINT

(如果可能的话,最好只修复查询,但根据您的行为,这可能会非常困难。)