[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 メーリングリストの案内