[pgsql-jp: 27812] PL/pgSQL のトリガプロシージャで SQL ログをとる方法
yoshida @ tkm.att.ne.jp
yoshida @ tkm.att.ne.jp
2002年 10月 28日 (月) 16:00:14 JST
お世話になります、吉田と申します。
PL/pgSQLを利用したトリガプロシージャの質問です。
複数のテーブルに対しPL/pgSQLで作成したトリガを組み込み、
ログテーブルに、
カラム1 変更日付(実際はDefault NOW()定義)
カラム2 テーブル名
カラム3 SQL文
といったような感じでログを書き出したく思っております。
そこで煮詰まっているのが、カラム3のSQL文で、PL/pgSQLの定義済み
変数のTG_OPだと、トリガを発行した操作を示す'INSERT'、'UPDATE'、'DELETE'
という各文字列は定義されているようですが、実際に欲しているトリガを発行した
操作の「SQL文」は定義されていないようです。
考えているのは、全てのテーブルに対し同じトリガを使いまわしたく且つ、
ログテーブルは1つという構成です。
このような事をやりたい場合、どのような方法をとったらよいのかを
ご教授願いたいと思います。
・・・一応、私が考えた案を以下に書き出します。
・・・かっこわるいのでできるだけ使いたくはありません。
案1
トリガプロシージャに、ログをとられるテーブル全てのテーブル
定義を登録し、TG_RELNAMEから取得したテーブル名により、NEW変数
OLD変数を利用しトリガプロシージャ内部でSQL文を生成する。
メリット: 管理が1つで行える。
デメリット: テーブルの増減、カラムの追加/削除 毎に、
トリガプロシージャを修正しなければならない。
案2
案1のロジックを各テーブル毎に分割し、ログをとられるテーブル毎に
トリガプロシージャを組み込む。
メリット: 変更のあるテーブルに対するトリガプロシージャのみ
修正すればよい。
デメリット: テーブル数毎にトリガプロシージャを作成しなければ
ならない。
・・・・ながながと汚い日本語を連ねてしまいましたが、良い方法をご教授
願います。
////////////////////////////
吉田 剛
Takeshi Yoshida
Mail: yoshida @ tkm.att.ne.jp
////////////////////////////
pgsql-jp メーリングリストの案内