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時不會出現此錯誤信息,很快就找到出錯的地方了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM