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
);
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.
7条答案
按热度按时间0s0u357o1#
这将返回所有你想知道的细节
字符串
或者,如果你想对特定表的结果进行排序,那么你可以尝试
型
下面将返回具有触发器的表名
型
vddsk6oq2#
视图
information_schema.triggers
的问题(除了速度慢之外)是,per documentation:视图触发器包含当前数据库中定义的所有触发器,这些触发器针对当前用户拥有的表和视图,或对这些表和视图具有除
SELECT
之外的某些权限。这意味着,您只能看到您拥有相应权限的触发器。
要查看表的所有触发器,请查看系统目录
pg_trigger
字符串
我添加了
tgisinternal
来显示哪些是 * 内部 * 触发器,并添加了pg_get_triggerdef(oid)
来获取定义(主要与非内部触发器相关)。适用于表 * 和 * 视图。
或者,您可以使用pgAdmin之类的GUI,在对象浏览器中的表节点下显示列表。
xkrw2x1b3#
在psql命令行工具上,你也可以使用
\dS <table_name>
(来自https://serverfault.com/questions/331024/how-can-i-show-the-content-of-a-trigger-with-psql)dy1byipe4#
字符串
xmq68pz95#
\df将列出所有函数,包括触发器。
\dft将列出所有触发器。
z31licg06#
我注意到infoschema不包含关于触发器的键关系表信息(至少在postgres10中). pg_triggers确实包含了这些信息。(然后你的表将缺少关系表,并且引用它们的触发器函数将失败)。PG文档说,infoschema中的action_reference_old_table列适用于postgres(10)中不可用的功能,但我肯定会使用它们,而且它们肯定会出现在pg_triggers中。供参考。
rkkpypqq7#
您可以使用information_schema.triggers和pg_trigger显示当前数据库中的所有触发器,如下所示。* 根据我的研究,在PostgreSQL中不可能一次显示所有数据库中的所有触发器:
个字符