triggers.ts54 lines · main
| 1 | import { safeSql } from '../pg-format' |
| 2 | |
| 3 | export const TRIGGERS_SQL = /* SQL */ safeSql` |
| 4 | SELECT |
| 5 | pg_t.oid AS id, |
| 6 | pg_t.tgrelid AS table_id, |
| 7 | CASE |
| 8 | WHEN pg_t.tgenabled = 'D' THEN 'DISABLED' |
| 9 | WHEN pg_t.tgenabled = 'O' THEN 'ORIGIN' |
| 10 | WHEN pg_t.tgenabled = 'R' THEN 'REPLICA' |
| 11 | WHEN pg_t.tgenabled = 'A' THEN 'ALWAYS' |
| 12 | END AS enabled_mode, |
| 13 | ( |
| 14 | STRING_TO_ARRAY( |
| 15 | ENCODE(pg_t.tgargs, 'escape'), '\\000' |
| 16 | ) |
| 17 | )[:pg_t.tgnargs] AS function_args, |
| 18 | is_t.trigger_name AS name, |
| 19 | is_t.event_object_table AS table, |
| 20 | is_t.event_object_schema AS schema, |
| 21 | is_t.action_condition AS condition, |
| 22 | is_t.action_orientation AS orientation, |
| 23 | is_t.action_timing AS activation, |
| 24 | ARRAY_AGG(is_t.event_manipulation)::text[] AS events, |
| 25 | pg_p.proname AS function_name, |
| 26 | pg_n.nspname AS function_schema |
| 27 | FROM |
| 28 | pg_trigger AS pg_t |
| 29 | JOIN |
| 30 | pg_class AS pg_c |
| 31 | ON pg_t.tgrelid = pg_c.oid |
| 32 | JOIN information_schema.triggers AS is_t |
| 33 | ON is_t.trigger_name = pg_t.tgname |
| 34 | AND pg_c.relname = is_t.event_object_table |
| 35 | AND pg_c.relnamespace = (quote_ident(is_t.event_object_schema))::regnamespace |
| 36 | JOIN pg_proc AS pg_p |
| 37 | ON pg_t.tgfoid = pg_p.oid |
| 38 | JOIN pg_namespace AS pg_n |
| 39 | ON pg_p.pronamespace = pg_n.oid |
| 40 | GROUP BY |
| 41 | pg_t.oid, |
| 42 | pg_t.tgrelid, |
| 43 | pg_t.tgenabled, |
| 44 | pg_t.tgargs, |
| 45 | pg_t.tgnargs, |
| 46 | is_t.trigger_name, |
| 47 | is_t.event_object_table, |
| 48 | is_t.event_object_schema, |
| 49 | is_t.action_condition, |
| 50 | is_t.action_orientation, |
| 51 | is_t.action_timing, |
| 52 | pg_p.proname, |
| 53 | pg_n.nspname |
| 54 | ` |