トランザクション

PostgreSQLトランザクションのネストに対応していない件について修正している最中、「自分が今トランザクションの中にいるのかどうか」を知ることができれば、その情報に基づいてトランザクションを開始するのをやめる(当然、終了するのもやめる)ことができ、結果としてうまくいくのではないかと思って調べてみたが、どうやらそれを調べる方法は用意されていないようだ。
psql上でbeginを連発すると、二回目以降はwarningが付くのだが、PEARのDBクラスとかでは無反応らしい。SQLコマンドのリストにもそれらしい問い合わせ方法はない。
名案だと思ったのだが。
DBクラスのオブジェクトを見るとトランザクションに関係しそうなものがあるのだが、トランザクションを開始した状態で中身を見ても状態が変わらない。どうやら「自動コミット」に関連したもののようだ。
トランザクションを開始する方法をただ一つの関数に集約して、その関数でトランザクションのネストを判定する・・・のは「それ以外の方法でトランザクションを開始してしまった」という問題が出てきそうでやる気にならない。