[pgsql-jp: 40501] Re: 大容量のテーブルに対してSQLを発行するとエラーになる件について

Hiroshi Inoue inoue @ tpf.co.jp
2010年 11月 4日 (木) 19:22:40 JST


井上です。

(2010/11/04 18:27), Itagaki Takahiro wrote:
> 2010/11/4 Hiroshi Inoue<inoue @ tpf.co.jp>:
>> psqlodbcドライバは取得データをメモリに保持しますので、これだけ大量の
>> データを取得すると大抵の場合メモリーオーバーフローを起こします。回避
>> するためにはDeclare~Fetchを使用するをオンにして利用してください。
>
> 便乗質問になりますが、この際には DECLARE と FETCH の SQL を
> 発行することになりますか? 拡張プロトコルであれば、
> プロトコル・レベル・カーソルもサポートされていると思いますが、
> ODBC ドライバでは利用されないでしょうか?

何というか中途半端な形で利用しています。ODBCで欲しいのは
スクロール可能なトランザクションをまたぐカーソルなのです
が、現在プロトコルレベルではこのようなカーソルは作成でき
ません。なのでカーソルの作成はDECLAREを利用し、fetch操作
はexecuteをリクエストするといった変な流れを採用しています
が、無駄に複雑化してしまっているだけかもしれません。
たとえば
1.最初のfetchに関してはdeclare;fetchとマルチコマンドに
  した方がラウンドトリップ時間が減るのでそうしている。
2.トランザクションをまたぐexecuteを実行するとクラッシュ
  するのでしようがなくfetchコマンドに切り替えている。
  バグだと言いたい所ですが、これが可能という公式仕様は
  当然ながらありません。
などexecuteリクエストの利用は気休めと言われても仕方ない
レベルかもしれません。



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