如何使用 psql 显示触发器的内容?

如何使用 psql 显示触发器的内容?

我知道我可以用 列出触发器\dft。但我如何才能看到一个具体的触发器?我想知道触发器在哪些事件上执行、哪个函数执行等等详细信息。

答案1

好的,我自己发现了这一点。

该命令\dft并不显示触发器本身(正如我所想的那样),它显示所有触发器函数(返回类型触发器)。

要查看您可以创建的触发器\dS <tablename>,它不仅显示该表的列,还显示该表上定义的所有触发器。

要显示触发函数(或任何函数)的来源,请使用\df+ <functionname>

答案2

如果您无权访问 psql 命令,您仍然可以使用:

select pg_get_functiondef('functionname'::regproc);

答案3

您可以尝试以下操作:

SELECT event_object_table,trigger_name,event_manipulation,action_statement,action_timing FROM information_schema.triggers ORDER BY event_object_table,event_manipulation

或者您可以像这样显示名为“testtable”的表的触发器:

SELECT event_object_table,trigger_name,event_manipulation,action_statement,action_timing FROM information_schema.triggers WHERE event_object_table='testtable' ORDER BY event_object_table,event_manipulation

答案4

例如,您可以创建my_t触发器,该触发器在表上对每一行发生 UPDATE 操作后运行 my_func(),person如下所示。*我的帖子解释如何创建触发器:

CREATE TRIGGER my_t AFTER UPDATE ON person
FOR EACH ROW EXECUTE FUNCTION my_func();

首先,你需要从触发器如下所示:

postgres=# SELECT oid FROM pg_trigger WHERE tgname = 'my_t';
  oid
-------
 16429
(1 row)

my_t然后,你可以使用以下代码获取触发器的代码pg_get_triggerdef()和 OID 如下所示。*我的帖子用以下函数解释 OID:

postgres=# SELECT pg_get_triggerdef(16429);
                                     pg_get_triggerdef
-------------------------------------------------------------------------------------------
 CREATE TRIGGER my_t AFTER UPDATE ON public.person FOR EACH ROW EXECUTE FUNCTION my_func()
(1 row)

或者,您可以从中获取 OID ,并立即获取触发器pg_trigger的代码和 OID,如下所示:my_tpg_get_triggerdef()

postgres=# SELECT pg_get_triggerdef((SELECT oid FROM pg_trigger WHERE tgname = 'my_t'));
                                     pg_get_triggerdef
-------------------------------------------------------------------------------------------
 CREATE TRIGGER my_t AFTER UPDATE ON public.person FOR EACH ROW EXECUTE FUNCTION my_func()
(1 row)

相关内容