[pgsql-jp: 29766] Re: トリガの内容表示

YUUTA KOBAYASHI ykobayas @ cd.maruzen.co.jp
2003年 5月 1日 (木) 12:40:30 JST


こばやしです。こんにちは。

Chie.Mさんに教えていただいたSQLで出来ました。
ありがとうございます!

OracleのSchema Managerに慣れちゃうとだめですね。

石田さんに教えていただいた方法も試してみます。

> Chie.Mです。こんにちは。
>
> > テーブル名はtgrelidから探っていくのでしょうか?(どうやって!?)
> > 呼び出すfunction名はtgfoidから探っていくのでしょうか?(どうやって!?
> )> キックされる条件もtgfoidから探れるのでしょうか?
>
> 普通にSQLを発行するのではダメでしょうか?
> マニュアルに書いてある条件どおりに組めば、関数名とかテーブル名は
> 取得できると思います。
>
> 私もPostgreSQLは初心者の部類なので、pg_trrigerのテーブルの中身と
> マニュアルつき合わせて挑戦してみました。
>
> かなり適当ですが、こんな感じで↓
>
> SELECT
>     A.tgname AS トリガ, C.relname AS テーブル名,
>     A.tgtype AS 種類, P.proname AS 関数
> FROM
>     pg_class AS C INNER JOIN (
>         pg_trigger AS B INNER JOIN
>             pg_trigger AS A ON B.tgconstrrelid = A.tgrelid
>     ) ON C.oid = B.tgconstrrelid INNER JOIN
>     pg_proc AS P ON A.tgfoid = P.oid
> WHERE
>     A.tgisconstraint=false
> GROUP BY
>     A.tgname, C.relname, A.tgtype, P.proname;
>
> # 実際使う場合はもっとましなSQL書いてください^^;
> # 他にもっとマシな方法があったら識者の方突っ込んでください・・・。
>
> 種類のカラムは「トリガー条件を指定するビットマスク」で
>  0x1:ROW、0x2:BEFORE、0x4:INSERT、0x8:DELETE、0x10:UPDATE
> ということだそうです。
> これはソースコードみないとダメみたいですが、過去ログに出てました。。。
>
> この値を取得したい時は、
>  tgtypeの値が7の時は「BERORE INSERT FOR EACHE ROW」
>  tgtypeの値が19の時は「BEFORE UPDATE FOR EACH ROW」
> などど、関数にでもしておけば、表示も可能だと思います。
>
> 用途にもよると思いますが、石田さんの書かれた↓こちらの方法のが
> 簡単かも知れません。
> > それ以外の方法としては、pg_dump したファイルの中身を見れば確認できます
>
> ↓これがすごく楽しみですね。
> > trigger についても、pg_get_triggerdef() という関数が
> > 開発中のバージョンにははいっているようです。
> > http://archives.postgresql.org/pgsql-patches/2003-03/msg00066.php
>
> 石田さん情報ありがとうございました!(^-^)
> ----------------------------
> Chie.M <gontakun @ fish.co.jp>
>





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