[pgpool-general-jp: 640] Re: pgpoolでのholdable cursorの使用について
Hiroshi Inoue
inoue @ tpf.co.jp
2009年 11月 23日 (月) 09:11:36 JST
Hiroshi Inoue wrote:
> はじめてお世話になります。
> 井上です。
>
> 本家のpgsql-odbcに
> [ODBC] declare/fetch problem with pgpool 2.2.3; Postgres 8.4; ODBC
> 8.03.04.00
> の投稿がありました。pgpoolとODBCの組合せ利用における不具合の報告
> ですが、pgpoolは未経験でよくわからず、お知恵をお貸しください。
JPUGConでは色々お世話になりありがとうございました。
その場で石井さんには簡単に説明させていただきましたが、補足させて
いただきます。まず元記事は
http://archives.postgresql.org/pgsql-odbc/2009-11/msg00037.php
です。
psqlODBCドライバでは大量のデータを返すselectを使う際のメモリ使用
の抑制や応答時間短縮のために、内部的にカーソルを利用するuse
declare/fetch modeを大昔から提供しています。7.4からはholdable
カーソルを利用してトランザクションをまたぐ処理も可能となっていま
す。use declare/fetch modeで発行されるコマンド又はメッセージは
下記のとおりです。
1)オープン(round trip時間節約のためマルチコマンド呼出し)
[BEGIN;]declare ... cursor with hold for select ...;fetch
最初の何行か(デフォルトでは100行) in ....
2)フェッチ
コミット前) 拡張プロトコル executeメッセージ使用
コミット後) FETCHコマンド使用
3)位置移動
MOVEコマンド使用
4)クローズ
CLOSEコマンド使用
1)及び2)のexecuteは最初のトランザクション内で実行されますが
2)3)4)のFETCH,MOVE,CLOSEはトランザクション外で発行される
可能性があります。元記事の例ではコミット後にトランザクション
ブロック外でCLOSEコマンドが発行されていると思われます。
以上よろしくお願いいたします。
pgpool-general-jp メーリングリストの案内