zoukankan      html  css  js  c++  java
  • PostgreSQL报错:当前事务被终止,命令被忽略,直到事务块结束

    最近程序在PostgreSQL环境运行时出错,从日志里查到的最新的错误信息是:当前事务被终止,命令被忽略,直到事务块结束。如果是英文版,则为:

    current transaction is aborted, commands ignored until end of transaction block.

    但在查找原因时,令人感到十分迷惑,因为SQLException堆栈中给出的错误信息与出错处的代码看起来风马牛不相及。这使得在定位出错位置时走了不少冤枉路。

    经过很长时间的努力,才发现原因所在,其特点如下:

    1. 使用同一个connection执行多个sql;
    2. 前面执行第一条sql时出错,但在捕获SQLException时没有显式或隐式的rollback;
    3. 后面再执行第二条sql时,立即抛出“当前事务被终止,命令被忽略,直到事务块结束”,例外堆栈里却仍是第一条sql执行时的错误信息。

    因此针对第二点,在捕获SQLException时加上rollback,如:

            catch (SQLException e)
            {
                conn.rollback();
                LOGGER.error(e);
            }

    则之后再执行sql时不会出现此错误信息,很快就找到出错的地方了。

  • 相关阅读:
    19. 各种提权姿势总结
    18. 各种数据库查询基础
    Kafka——分布式消息系统
    跳表
    Linux的io机制
    Make命令
    ElasticSearch之二——集群
    ElasticSearch之一——索引
    Scribe日志收集工具
    Thrift 的原理和使用
  • 原文地址:https://www.cnblogs.com/wggj/p/12703409.html
Copyright © 2011-2022 走看看