2010年11月 4日

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

井上です。

(2010/11/04 18:27), Itagaki Takahiro wrote:
> 2010/11/4 Hiroshi Inoue<inoue@xxxxx>:
>> psqlodbcドライバは取得データをメモリに保持しますので、これだけ大量の
>> データを取得すると大抵の場合メモリーオーバーフローを起こします。回避
>> するためにはDeclare?Fetchを使用するをオンにして利用してください。
>

> 便乗質問になりますが、この際には DECLARE と FETCH の SQL を
> 発行することになりますか? 拡張プロトコルであれば、
> プロトコル・レベル・カーソルもサポートされていると思いますが、
> ODBC ドライバでは利用されないでしょうか?

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


投稿者 xml-rpc : 2010年11月 4日 19:22
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/99711
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。