[pgsql-jp: 32155] Re: PL/pgSQL の格納形式

Kazumasa Gotoh kgotoh @ cic-kk.co.jp
2004年 1月 29日 (木) 14:57:57 JST


人から聞かれたんですけど、ちょっと即答できなかったので
皆さんにご相談です。(^^;

質問されたのは、「PL/pgSQL は ORACLE の PL/SQL みたいにバイナリ
で格納されるのか?」というものでした。

PostgreSQL のマニュアルを読んでみると、以下のように書いてあります。

  1. 初めてその関数が(各セッションで)呼び出されたときにバイナリ形式の
     命令ツリーを内部で作成する。
  2. 各式や SQL コマンドが初めてその関数で使用される時に実行計画の
     準備を行い、その後に式やコマンドが実際に実行される時に、その
     準備された計画を再利用する。(計画の準備と保存を行う)

ここで、2. の方は良いのですが、1. の「初めて呼び出された時」って
どのタイミングの事なの? が、よくわかりません。(^^;

    create or replace function my_func() retruns integer as '
     ホゲ  ' language 'plpgsql';

とやって、登録される時が「初めて」ではないかとも思うのですが、
「(各セッションで)呼び出される」というと、当該 DB セションで
初めて実行される時ともとれます。どうなのでしょうか?

実行効率で考えれば、登録時に PL/pgSQL インタプリタ用のバイナリへ
変換した方が良いとは思うのですが、上記の書き方では何とも言えない
ような…

ソースを追うほどの根性が今はないので、(^^; どなたかご教示願えれば
幸いです。 7.4.1 オンリーの話で構いません。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
(株) セントラル情報センター
                             後藤和政    kgotoh @ cic-kk.co.jp



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