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