アプリ版:「スタンプのみでお礼する」機能のリリースについて

PL/pgSQL を使用し更新処理を行いたいのですが、
パラメータの数が多すぎるのか
以下のエラーでデータベースにファンクションを定義出来ません。
ERROR: functions cannot have more than 100 arguments
SQLステート:54023

可変長引数で作成すると、データベースに定義は出来るのですが
ファンクション実行時に同様のエラーが発生し更新処理が行えません。

PL/pgSQL の引数を100以上使用出来る様にする設定等、存在するのであれば
教えて頂きたいです。

環境は以下の内容です。
CentOS-6.2-x86_64
Apache/2.2.15
PostgreSQL 9.1.3
PHP Version 5.3.3 (PDOを使用しています)

A 回答 (1件)

100 以上の引数をもった関数を定義できるようにするには、ソースコードを修正してコンパイルしなおす必要があります。



ヘッダファイル src/include/pg_config_manual.h 内の定数 FUNC_MAX_ARGS を修正してください。ソースコードのコメントには約 600 まで増やせるということです。

100 以上の引数をもつ関数を定義すること自体、設計に何らかの問題がありそうなので、そちらを見なおしたほうがよいと思います。

あるいは、引数を配列や複合型で渡すことを考えたほうがいいかもしれません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

ご指摘の通りファンクションの設計に問題があると思います。

MySqlよりコンバートしているのですが、トランザクションの各カラムをすべてファンクションに送り、ファンクション内で各テーブルの更新及びトランザクションの追加処理を行っているため今回ご質問させて頂いた現象が発生してしまいました。

トランザクションの追加処理はPHP側で行いトリガで各テーブルの更新ファンクションをコールする形に修正しようと思います。

お礼日時:2012/04/24 00:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す