[pgsql-jp: 39286] Re: 非同期コマンドの複数実行

河本陽一 komoto.yoichi @ kcc.co.jp
2008年 3月 14日 (金) 10:47:16 JST


こうもとです。

Hiroki Kataoka さんの書いたこと:
> 1.データ取得(初回はスキップ)
> 2.データ取得要求
> 3.データ処理(初回はスキップ)

 そうですね。実際に呼び出す関数だと、

1.PQsendQueryParams()
2.PQgetResult()            # 1.の結果を取得
3.PQsendQueryParams()
4.2.で取得したデータの処理
5.PQclear()                # 2.のエリアを開放
6.PQgetResult()            # 3.の結果を取得
7.PQsendQueryParams()
8.2.で取得したデータの処理
9.PQclear()                # 6.のエリアを開放
          :

 となります。

 このとき気になったのが、PQgetResult()で取得したデータの領域が、
PQclear()を呼ぶまで本当に保持されるのかということです。
PQsendQueryParams()で消える情報があるのではないかと思っていました。
 しかし、PQclear()の説明を読むと、「新しい問い合わせを発行する場合
でも、接続を閉じてしまうまでは PGresult は消えません。」とあるので、
次の要求をしても消えないということで安心しました。

 ということで、PQclear()のタイミングをずらすことで、取得要求をしつ
つ処理を行うことにします。

======================================================================
河本陽一(こうもとよういち)
mailto:komoto.yoichi @ kcc.co.jp




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