[pgsql-jp: 29126] Re: setAutoCommit で Warning
Daichi Ueura
daichi @ lifeflow.jp
2003年 2月 19日 (水) 03:35:05 JST
上浦です。
On Tue, 18 Feb 2003 22:17:18 +0900
"T.Suzuki" <t_suzuki @ kenwood-eng.co.jp> wrote:
> hoge=# autocommit = off;
> hoge=# select 1; commit; set autocommit = on;
>
> Warningのログは出ません。
> ならば、psqlで実行した場合と、executeQuery()で実行した場合に
> 問題があるのかと思い、次の処理をサンプルソース中で実行しました。
>
> rs = st.executeQuery("select 1; commit; set autocommit = on;");
>
> すると、Warningのログが出ました。
PHPで実行してみたところ、Warningが出ました。
JDBCだけの問題ではないようです。psqlとその他のインターフェースでは、
SQLの投げ方が違うのでしょうか?
(JDBC等はそのまま投げているが、psqlは3つに分けてるとか)
> > この部分を、
> > --------------------
> > execSQL("select 1;");
> > execSQL("commit; set autocommit = on;");
> > --------------------
> > と変更したドライバでは問題が発生していません。
> >
> > トランザクションが自動で開始されるタイミングに問題があるのかな??
>
> 一回のexecute()で、問い合わせとコミットを発行しても、
> トランザクションが開始された事にならないのでしょうか…?
> だとしたら、2回に分けて実行する事で解決できたのには納得がいきます。
> 詳細は、JDBCからバックエンドに渡されたSQLが、どういった手順で実行
> されるかについて理解しないと分かりませんね…。
pgsql-jdbcで探したところ、似たような報告を見つけました。
(結局どうなったのかよくわかりません・・・)
http://archives.postgresql.org/pgsql-jdbc/2003-01/msg00149.php
作成しているアプリケーションは Jakarta Project commons-dbcp package を用
いてコネクションプーリングを行っているのですが、トランザクション処理を行っ
ている部分が実行されるたびにWarningが記録され、PostgreSQLのログが悲惨な
状態になってます(T_T)
一気に投げるとトランザクションが開始されないのは仕様か・バグかよくわかり
ません。とりあえず、
--------------------
942c942,943
< ExecSQL("select 1; commit; set autocommit = on;");
---
> ExecSQL("select 1;");
> ExecSQL("commit; set autocommit = on;");
--------------------
の変更を加えたJDBCドライバでWarningを回避しようと思います。
┛
┛ Daichi Ueura
┛
┛ Hiroshima City Univ, Department of Intelligent Systems.
┛ e-mail: (Private) daichi @ lifeflow.jp
┛ : (Office) daichi @ neu.co.jp
┛ : (Univ) g23010 @ cr.info.hiroshima-cu.ac.jp
┛
┛
pgsql-jp メーリングリストの案内