[pgsql-jp: 35576] Re: libpqxx ライブラリを使用したトランザクション制御について

堀越 horihorikoshi @ yahoo.co.jp
2005年 6月 24日 (金) 16:29:01 JST


板垣さん、お返事ありがとうございます。

> workの作成は初回のみで、毎回 work::commit()
> すれば良いように見えます。
>     while(...){
>         ExecSQL(W, ...);
>         W.commit();
>     }
> のような使い方ができるでしょうか?
→ この方法は以前に試したのですが、W.commit()後には、そ
のオブジェクトを使用して、いかなるSQLも発行できないよう
になっているようです。以下のような例外が発生します。
Attempt to execute query in committed transaction<READ
COMMITTED>

> もしくは、自動的にトランザクションが開始されているよう
なので、
> それを抑制するようなオプションはありますか?
→ トランザクションは最初のW.exec(SQL文)が発行されたとき
に開始されるようです。オプション指定としては、コンストラ
クタがwork W(コネクションオブジェクト,トランザクション名)
となっていて、トランザクション名以外には特にオプションし
てはできないようです(libpqxxライブラリに関しては、英語
のドキュメントしかないのでもしかしたら見逃しているかもし
れません...)。

現状では、ループ内で呼んでいる関数ExecSQL内で毎回workオ
ブジェクトの生成と破棄をするようにして対応しております(
正確にはまだ計測していませんが、若干処理速度が気になって
います)。


__________________________________
Save the earth
http://pr.mail.yahoo.co.jp/ondanka/




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