How to get the trigger(s) associated with a view or a table in PostgreSQL
I have one requirement that I have to get the list of triggers associated to the given table/view.
Can anyone help me to find the triggers for a table in PostgreSQL?
Solution 1:
This will return all the details you want to know
select * from information_schema.triggers
or if you want to sort the results of a specific table then you can try
SELECT event_object_table
,trigger_name
,event_manipulation
,action_statement
,action_timing
FROM information_schema.triggers
WHERE event_object_table = 'tableName' -- Your table name comes here
ORDER BY event_object_table
,event_manipulation
the following will return table name that has trigger
select relname as table_with_trigger
from pg_class
where pg_class.oid in (
select tgrelid
from pg_trigger
)
Solution 2:
The problem with the view information_schema.triggers
(besides being slow) is, per documentation:
The view triggers contains all triggers defined in the current database on tables and views that the current user owns or has some privilege other than
SELECT
on.
Meaning, you only get to see triggers you have appropriate privileges on.
To see all triggers for a table, look in the system catalog pg_trigger
SELECT tgname
FROM pg_trigger
WHERE tgrelid = 'myschema.mytbl'::regclass; -- optionally schema-qualified
Works for tables and views.
Or you could use a GUI like pgAdmin that displays the list under the table node in the object browser.
Solution 3:
On psql command-line tool you can also use \dS <table_name>
(from https://serverfault.com/questions/331024/how-can-i-show-the-content-of-a-trigger-with-psql)
Solution 4:
select tgname
,relname
,tgenabled
,nspname from pg_trigger
join pg_class on (pg_class.oid=pg_trigger.tgrelid)
join pg_namespace on (nspowner=relowner);
tgenabled (To check if its disabled)
O = trigger fires in "origin" and "local" modes,
D = trigger is disabled,
R = trigger fires in "replica" mode,
A = trigger fires always.