PostgreSQL9.0データベースを変更するために.NET4.0でNpgsql2.0.11を使用しています。プログラムは、すべて1つのトランザクション内で、データベースに多くの変更を加えます。
コミットする直前に、SELECTステートメントを実行しますが、失敗することがあります(タイムアウトなど)。私は例外を飲み込み、先に進んでとにかくトランザクションをコミットします。エラーはないので、すべてが機能しているように見えますが、実際にはデータベースはまったく変更されていません。
私の推測では、失敗したSELECTはトランザクション全体をロールバックしました。これを防ぐ(つまり、トランザクションをまだコミットする)か、少なくともこの状況を検出して例外をスローし、ユーザーがコミットが失敗したことを認識できるようにすることはできますか?
この特定のケースでは、SELECTをトランザクションの外に移動できることは知っていますが、一般的なケースではこれを解決することに関心があります。コミットをコミットしないことはかなり深刻な問題であり、それが検出されないようにしないようにしたいと思います。