triggers.ts54 lines · main
1import { safeSql } from '../pg-format'
2
3export const TRIGGERS_SQL = /* SQL */ safeSql`
4SELECT
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
27FROM
28 pg_trigger AS pg_t
29JOIN
30 pg_class AS pg_c
31ON pg_t.tgrelid = pg_c.oid
32JOIN information_schema.triggers AS is_t
33ON is_t.trigger_name = pg_t.tgname
34AND pg_c.relname = is_t.event_object_table
35AND pg_c.relnamespace = (quote_ident(is_t.event_object_schema))::regnamespace
36JOIN pg_proc AS pg_p
37ON pg_t.tgfoid = pg_p.oid
38JOIN pg_namespace AS pg_n
39ON pg_p.pronamespace = pg_n.oid
40GROUP 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`