[pgsql-jp: 29859] Re: トランザクションエラーについて。

Ihara senjyu @ f2.dion.ne.jp
2003年 5月 12日 (月) 22:14:36 JST


 Ihara と申します。
その後、この話題が完結するのを期待していたのですが、
完結していないようなので、ちょっとよこはいりさせて頂きます。

私も同様の現象がたまに発生します。
それは、Apache+php+PostgreSQLでプログラムを作成しているのですが、
BEGINでトランザクションの開始 をさせたあと、COMMITまでの間に、
phpで作っているプログラムのコーディングミスがあって、PostgreSQLへのSQL文が
エラーとなった場合です。エラーとなった場合には、ROLLBACKさせる処理もいれ
ています。
こんな感じです。
$sql = "INSERT ・・・・・"; ← この文にミスがあり、
$ret = pg_exec( $id, $sql); ← この命令でエラーになり、
if( ! $ret ) {
$sql = "ROLLBACK"; ← ROLLBACKを行なう。
pg_exec( $id, $sql);
exit();
}
このエラーとなった部分のPHPのPGを修正して、ブラウザの再読みこみボタンや
戻るボタンなどを使いながら、その部分をデバッグしていると、最初はこのメッ
セージのエラーは発生しないのですが、
何回目かに同じく、

transaction is aborted, queries ignored until end of transaction block

というメッセージが出力されます。

しかも、そのメッセージが出力された後は、この部分以外のところのSelect文で
も出力されるようになり、
で、仕方なくPostgreSQLを再起動させて復活させています。

結果的には、コーディングミスがなくなると、このエラーが発生しにくくなる
(といいますか今のところ発生していません。)ので、問題ないと言えば問題な
いのですが、開発が完了し、オンライン運用になった際に、万一、同様の現象が
発生したときに、再起動させないで復活させたいのですが、この状態を回避させ
る方法がわかりません。

ということで、
1.なぜ、何回目かにこのメッセージが出力されてしまうのか?
2.このエラーが発生した場合の復活方法
がわかりません。

以上、よろしくお願いします。





pgsql-jp メーリングリストの案内