[pgsql-jp: 25237] 【解決しました】function の引数の数について

市村 正和 m.ichimura @ nihontechno.co.jp
2002年 3月 12日 (火) 09:10:14 JST


市村です。
functionの引数の制限の件ですが、解決いたしました。

永安さん、アドバイスありがとうございます。
微妙にファイル名は違いましたが、
ご指摘いただいた通りでした。

> > 引数を多くすると下のようなエラーが出てしまい、
> > 15個までの引数しか受け付けないのですが↓
> > 
> > psql:sp_chumon1_insert.sql:9: ERROR:  functions cannot have more than 16
> > arguments
> > psql:sp_chumon1_insert.sql:93: ERROR:  Procedures cannot take more than 16 arguments
> > 
> > SQLserverのspのように、20個程度の引数でfunctionを実行する方法は
> > ないのでしょうか?・・・
> 
> ソースを見てみたところ、src/include/pg_config.h の
> 
> ------------------------------------------------------------------------
> /*
>  * Maximum number of columns in an index and maximum number of arguments
>  * to a function. They must be the same value.
>  *
>  * The minimum value is 8 (index creation uses 8-argument functions).
>  * There is no specific upper limit, although large values will waste
>  * system-table space and processing time.
>  *
>  * CAUTION: changing these requires an initdb.
>  *
>  * BTW: if you need to call dynamically-loaded old-style C functions that
>  * have more than 16 arguments, you will also need to add cases to the
>  * switch statement in fmgr_oldstyle() in src/backend/utils/fmgr/fmgr.c.
>  * But consider converting such functions to new-style instead...
>  */
> #define INDEX_MAX_KEYS          16
> #define FUNC_MAX_ARGS           INDEX_MAX_KEYS
> 
> ------------------------------------------------------------------------
> 
> あたりが関係ありそうです。
> 
> バックエンドの中では FUNC_MAX_ARGS を見ているようです。
> 
> 上記のコメントを参考に試してみてはいかがでしょうか。

上のファイルを探してみたところ、
$ ./configure で、

src/include/config.h というファイルが作られるので、
その中の"INDEX_MAX_KEYS"の16を変更して、

$ make
$ make install-all-headers
$ make install

で、うまくいきました。

#レス遅くなってすみません。

-- 
***************************************************
          日本テクノシステム株式会社
          システム営業一部 システム課
          市村 正和
          E-MAIL:m.ichimura @ nihontechno.co.jp
***************************************************




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