我目前正在使用pgbouncer为我的连接池从MySQL迁移到postgres。
我们选择/插入/更新/删除来自postgres的大量数据,所有数据都来自远程来源,因此我们尝试在插入之前尽可能提高数据质量,但有时会出现一些不良数据。
这会导致postgres报告current transaction is aborted, commands ignored until end of transaction block
这很好,除了通过pgbouncer的连接将为每个查询报告此错误。如果我直接连接到postgres而不是pgbouncer,我会得到相同的逻辑。我希望它能够回滚导致此问题的任何交易。
有没有办法只是回滚并继续正常工作?我读过的所有内容都说明了修改查询,但在这种情况下并不总是可行。
答案 0 :(得分:3)
您需要使用ROLLBACK
命令。这将撤消自上次BEGIN TRANSACTION
或START TRANSACTION
以来的所有内容。请注意,事务不会嵌套;如果你在没有提交的情况下开始多个交易,这将回滚最外面的交易。
这将使您进入自动提交模式。您可能希望发出新的BEGIN TRANSACTION
命令来打开新事务。
如果你有错误之前的保存点,你也应该能够ROLLBACK TO SAVEPOINT
。
(如果可能的话,最好只修复查询,但根据您的行为,这可能会非常困难。)