PostgreSQLで思わぬエラー

とあるプログラム(というかテストケース)を流すと、↓のような例外が出た。


org.postgresql.util.PSQLException: ERROR: current transaction is aborted, commands ignored until end of transaction block

実際のテストケースはこんな感じ。


try{
// executeQueryでSQLExceptionが発生するよう細工して
// テストターゲットをコール
// ・・・
fail();
} catch(SQLException e) {
}

// DBの状態が変化していないか確認
// ・・・

例外の原因調べていくと、どうやらPostgreSQLはとあるSQLの実行で失敗すると、
同じトランザクション内のそれ以降のSQLはすべて失敗するようになっているらしい。
上のテストケースでは、テストターゲットが使うConnectionとテストケースが
DBの状態確認で使うConnectionは同じものを使っていたので、この例外が出てたっぽい。


というわけで、書き直し・・・。