十月 11, 2023
摘要:触发器是当某个指定事件发生时触发/调用的函数。有时我们需要列出 PostgreSQL 中的触发器,以了解哪些触发器以及有多少触发器关联到表。在本文中,我们将了解列出数据库中所有触发器,以及列出与数据表相关的所有触发器的方法。
目录
如何列出 PostgreSQL 数据库中的触发器
在 PostgreSQL 中可以通过三种方式列出触发器。这些方法是:
● 方法 1:使用 information_schema.triggers。
● 方法 2:使用 psql。
● 方法 3:使用 pg_trigger 系统表。
让我们一一了解这 3 种方法。
方法 1:使用 information_schema.triggers
要列出与数据库关联的所有触发器,我们需要引用 “event_object_table”。这是定义触发器的表。我们还需要引用 “information_schema”,它为我们提供有关模式和表或当前数据库的信息。我们可以通过 information_schema 访问有关表及其元数据的一些信息*。*我们将从信息模式中获取有关触发器的信息。查询将如下所示:
SELECT event_object_table AS tab_name, trigger_name
FROM information_schema.triggers
GROUP BY tab_name, trigger_name
ORDER BY tab_name, trigger_name ;
该查询将为我们提供有关数据库中所有触发器及其关联表的信息。目前,我的数据库仅包含三个具有触发器的表,因此这将是上述查询的输出:
现在,如果我们想要列出与特定表关联的触发器,我们只需添加一个 where 子句来指定该特定表的名称。查询可以修改成这样:
SELECT event_object_table AS tab_name, trigger_name
FROM information_schema.triggers
WHERE event_object_table ='project_status'
GROUP BY tab_name, trigger_name
ORDER BY tab_name, trigger_name;
该查询将为我们提供与表 “project_status” 关联的所有触发器。就我而言,它只有一个触发器,因此只有一个触发器被列入输出中。
这就是第一个方法,在第二个方法中我们将看到如何使用 psql 完成相同的任务。
方法 2:使用 psql
我们还可以使用 psql 获取与表关联的触发器列表。我们可以通过在 psql 工具中运行 \dS 命令,来查看与表关联的所有触发器。步骤如下:
步骤 1:
首先,在本地系统中打开 psql。我们将连接到要查看表的数据库。当它要求 “用户 postgres 的密码” 时输入您的密码。您将看到以下内容:
步骤 2:
现在将命令写为 “ \dS 你的表名”。就我而言,它是 “\dS project_status”。所以这将给出与表相关的所有触发器。
您可以在最后一行看到,这是关联到该表的触发器。
方法 3:使用 pg_trigger 系统表
获取与特定表关联的触发器列表的第三种方法是使用 pg_trigger 系统表。“pg_trigger 系统表”用于保持并存储表上的触发器。要使用 pg_trigger 系统表获取表的触发器,我们可以编写以下查询:
SELECT
tgname AS trig_name
FROM
pg_trigger
WHERE
tgrelid = 'project_status'::regclass
ORDER BY
trig_name;
“tgname”是触发器名称。“tgrelid”指的是触发器所在的表,在其后面需要指定表的名称。查询的输出给出了与表 “project_status” 关联的触发器。
这就是我们列出数据库中表上的触发器的三种方法。
结论
在本教程中,我们列出了 3 种方法来列出数据库中的触发器。在第一种方法中,通过使用 information_schema.triggers,我们可以列出与任何表关联的触发器。第二种方法是使用 psql 命令,最后,我们看到了使用 pg_trigger 系统表列出触发器的方法。所有这些方法都可以帮助我们列出触发器。