PostgreSQLでトリガーの一覧を取得する

記事内に広告が含まれています。

PostgreSQLにはテーブルに対してデータを挿入(INSERT)の前後、更新(UPDATE)の前後、削除(DELETE)の前後のタイミングで自動で起動される処理をトリガーとして定義することができます。

この記事ではそのトリガーの一覧をPostgreSQLデータベースから検索するSQLを解説します。

PostgreSQLでトリガーの一覧を取得する

PostgreSQLでトリガーの一覧を取得するには information_schema.triggers と pg_trigger を利用して取得します。

実際のSQLは以下の通りです。

SELECT
     a.event_object_table  AS table_name
    ,a.trigger_name AS trigger_name
    ,a.action_statement AS action_statement
    ,REPLACE(a.action_statement, 'EXECUTE FUNCTION ','') AS func_name
    ,b.tgenabled AS trigger_enable
    ,COALESCE( a.action_condition, '' ) AS action_condition
FROM
    information_schema.triggers AS a
    LEFT OUTER JOIN pg_trigger AS b ON
        a.trigger_name=b.tgname
WHERE
    a.trigger_schema = current_schema()
GROUP BY
     a.event_object_table
    ,a.trigger_name
    ,a.action_statement
    ,b.tgenabled
    ,a.action_condition
ORDER BY
    a.trigger_name

上記のSQLの実行結果は

table_name  trigger_name  action_statement               func_name   trigger_enable  action_condition
table01       trigger01     EXECUTE FUNCTION trig0001()   trig0001()      O
table01       trigger02     EXECUTE FUNCTION trig0002()   trig0002()      D
table02       trigger03     EXECUTE FUNCTION trig0003()   trig0001()      O

になります。
WHERE 句にある a.trigger_schema = current_schema() は現在接続しているスキーマに対するものに絞って取得するためで、すべてのトリガー情報を取得する場合には不要になります。

また、action_condition はそのトリガーが現在、有効なのか無効なのかを表しています。

トリガーに結びついている関数は複数のトリガーで共有可能なので、削除する場合は依存を考慮して行うことが必要です。

まとめ

PostgreSQLにはテーブルに対してデータを挿入(INSERT)の前後、更新(UPDATE)の前後、削除(DELETE)の前後のタイミングで自動で起動される処理をトリガーとして定義することができ、トリガー情報は information_schema.triggers と pg_trigger を利用して取得します。

タイトルとURLをコピーしました