[pgsql-jp: 25142] Re: TRIGGER 作成でエラー
Takeshi Ken Yamada
ken @ tydfam.jp
2002年 3月 7日 (木) 21:39:18 JST
tsukasa> 小泉です。
tsukasa>
: : :
tsukasa> 結局、トリガー動作が「AFTER」でなければならないのでRULEはボツ。
tsukasa> PL/pgSQLで関数を書き直しました。(書き直すってほどじゃないですね)
tsukasa> これで問題なく動作しています。ありがとうございました。>ALL
tsukasa>
tsukasa> ところで。PL/pgSQLについて、次のような記述があるのですが、ちょっと気
tsukasa> になっています。
tsukasa>
tsukasa> 「PL/pgSQLはこのように実行プランを保存するので、直接 PL/pgSQL 関数内
tsukasa> に現れる問い合わせはあらゆる実行において同じテーブルとフィールドを
tsukasa> 参照するものでなければいけません。つまり、問い合わせ中でテーブルや
tsukasa> フィールド名を引数として使用することはできません。」
tsukasa>
tsukasa> これは、記述したSQL文に出てくるテーブル、カラムなどすべてを、OIDで参
tsukasa> 照しているから、関数内に名前が出てくるテーブルを作り直したりすると、
tsukasa> 関数〜トリガーも作り直さねばならない……ということでしょうか?
tsukasa>
私の知っている範囲ではYESです。
function で別の function を呼んでいたりすると、結構面倒です。(私は、
関係する function をまとめておいて、どれかを修正すると、全部消して、
再度入れ直すようにしています。前後にその為のスクリプトをコメントと
して入れたファイルを作り管理しています。)
ま、トリガーが走って、エラー出てから入れ直すという安直な方法もあり
ますが、頻繁にトリガーがかかるシステムではまずいですね。(私のは月イチ
なので、ここら辺はどうでもいいのですが。dummy で update してトリガー
のチェックしてみたりしています。)
pgsql-jp メーリングリストの案内