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 を利用して取得します。