[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 メーリングリストの案内