[pgsql-jp: 30408] Re: カーソルに対するSELECT

Makoto,Yui yuin @ bb.din.or.jp
2003年 7月 6日 (日) 01:06:21 JST


遅れました. 油井です.

丁度永安さんのポストと入れ違いでさっきまで別の作業していました.

>   Result setは作っていないです。それをするとResult setだけでサーバのメモリ
> を使い尽くすような膨大な行のSELECTが絶対に出来なくなってしまいます。

そんなものかと思ってました. サーバサイドで調性できる仕組みがOFFSET以外に
あったのですね.

>   PL/PGSQLのFORが実際にどうなっているかを調べたことがないのでこの辺は想像
> になってしまいますが、ドキュメントで言っているところの「FORではカーソルを
> 利用している」とは、プランを再利用するためではなく、単にFORのループ処理の
> ためにカーソルを使っているということだと思います。カーソルでは結果セットを
> あらかじめ作成したりしませんから、エグゼキュータから1行目の結果が得られれ
> ばすぐにでもループ処理を開始できることになります。

この辺は先のCursorの間違った認知からでした.

>   OFFSETを使っているということはないと思います(カーソルを使っているわけで
> すから)。

*SQL*のカーソルと別物のものをPL/PGSQLは持っているのかと勘ぐってました.
*僕の今まで思ってた*SQLのカーソルだと不可思議だったので..でも違いましたね.

>On Sun, 06 Jul 2003 00:02:12 +0900
>Hiroki Kataoka <kataoka @ interwiz.jp> wrote:
>
>直前までにFETCHした行も含めてResult setを全く持っていないの
>で、MOVE BACKWARD 10 等、前に戻るFETCHやMOVEをした場合、10行戻るために今来
>た道を再びFETCHしていくんです。もちろん逆向きにですが。

って発言でやっと理解しました. そんな手もあるのですね.
MOVE FORWARDでいくつくるのかわからないんだからresultセットは作ってるものだと
思ってたんですが, 何やらPostgresでは面白いことやってるっぽいですね.

他のDBの実装だとResult Set作ってるのが多いのではないでしょうか.
って流石に商用だとその辺は考えられてるか.

そんなinternalな動きはどっかにDocument起こされてませんかね^^;
#今までみたのにはなかったような.

+-------------------------------------------------------------------+
Makoto Yui <yuin @ bb.din.or.jp>
Key fingerprint = 6462 E285 97D8 1323 40C4  F9E5 EB0F 9DE6 1713 219E
+-------------------------------------------------------------------+



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