如何在PostgreSQL中获取与视图或表关联的触发器

Sar*_*nan 36 sql database postgresql

我有一个要求,我必须得到与给定表/视图关联的触发器列表.
任何人都可以帮我找到PostgreSQL中表的触发器吗?

Viv*_* S. 50

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

select * from information_schema.triggers
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

select relname as table_with_trigger
from pg_class
where pg_class.oid in (
        select tgrelid
        from pg_trigger
        )
Run Code Online (Sandbox Code Playgroud)


Erw*_*ter 31

视图的问题information_schema.triggers(除了慢)是根据文档:

视图触发器包含当前用户拥有的表和视图在当前数据库中定义的所有触发器,或者具有除SELECTon 之外的某些权限.

这意味着,您只能看到具有适当权限的触发器.

要查看表的所有触发器,请查看系统目录pg_trigger

SELECT tgname
FROM   pg_trigger
WHERE  tgrelid = 'myschema.mytbl'::regclass; -- optionally schema-qualified
Run Code Online (Sandbox Code Playgroud)

适用于表视图.
或者您可以使用像pgAdmin这样的GUI来显示对象浏览器中表节点下的列表.


Tou*_*uko 7

在psql命令行工具上,您也可以使用\dS <table_name>(来自https://serverfault.com/questions/331024/how-can-i-show-the-content-of-a-trigger-with-psql)

  • 这不包括“系统生成的触发器”,例如外键约束,以防您(此评论的读者)想要看到这些。请参阅[另一个答案](/sf/answers/1764339181/),了解包含这些内容的解决方案。 (2认同)