如何在PostgreSQL中显示与视图或表关联的触发器?

5tmbdcev  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(7)|浏览(196)

我有一个要求,我必须得到与给定的表/视图相关联的触发器列表。
谁能帮我在PostgreSQL中找到表的触发器?

0s0u357o

0s0u357o1#

这将返回所有你想知道的细节

select * from information_schema.triggers;

字符串
或者,如果你想对特定表的结果进行排序,那么你可以尝试

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;


下面将返回具有触发器的表名

select relname as table_with_trigger
from pg_class
where pg_class.oid in (
        select tgrelid
        from pg_trigger
        );

vddsk6oq

vddsk6oq2#

视图information_schema.triggers的问题(除了速度慢之外)是,per documentation
视图触发器包含当前数据库中定义的所有触发器,这些触发器针对当前用户拥有的表和视图,或对这些表和视图具有除SELECT之外的某些权限。
这意味着,您只能看到您拥有相应权限的触发器。
要查看表的所有触发器,请查看系统目录pg_trigger

SELECT tgname
     , tgisinternal, pg_get_triggerdef(oid) AS definition  -- optional additions
FROM   pg_trigger
WHERE  tgrelid = 'myschema.mytbl'::regclass;  -- optionally schema-qualified

字符串
我添加了tgisinternal来显示哪些是 * 内部 * 触发器,并添加了pg_get_triggerdef(oid)来获取定义(主要与非内部触发器相关)。
适用于表 * 和 * 视图。
或者,您可以使用pgAdmin之类的GUI,在对象浏览器中的表节点下显示列表。

dy1byipe

dy1byipe4#

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.

字符串

xmq68pz9

xmq68pz95#

\df将列出所有函数,包括触发器。
\dft将列出所有触发器。

z31licg0

z31licg06#

我注意到infoschema不包含关于触发器的键关系表信息(至少在postgres10中). pg_triggers确实包含了这些信息。(然后你的表将缺少关系表,并且引用它们的触发器函数将失败)。PG文档说,infoschema中的action_reference_old_table列适用于postgres(10)中不可用的功能,但我肯定会使用它们,而且它们肯定会出现在pg_triggers中。供参考。

rkkpypqq

rkkpypqq7#

您可以使用information_schema.triggerspg_trigger显示当前数据库中的所有触发器,如下所示。* 根据我的研究,在PostgreSQL中不可能一次显示所有数据库中的所有触发器:

SELECT * FROM information_schema.triggers;

个字符

相关问题