PostgreSQL 教程: 列出触发器

十月 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 ;

该查询将为我们提供有关数据库中所有触发器及其关联表的信息。目前,我的数据库仅包含三个具有触发器的表,因此这将是上述查询的输出:

img

现在,如果我们想要列出与特定表关联的触发器,我们只需添加一个 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” 关联的所有触发器。就我而言,它只有一个触发器,因此只有一个触发器被列入输出中。

img

这就是第一个方法,在第二个方法中我们将看到如何使用 psql 完成相同的任务。

方法 2:使用 psql

我们还可以使用 psql 获取与表关联的触发器列表。我们可以通过在 psql 工具中运行 \dS 命令,来查看与表关联的所有触发器。步骤如下:

步骤 1:

首先,在本地系统中打开 psql。我们将连接到要查看表的数据库。当它要求 “用户 postgres 的密码” 时输入您的密码。您将看到以下内容:

img

步骤 2:

现在将命令写为 “ \dS 你的表名”。就我而言,它是 “\dS project_status”。所以这将给出与表相关的所有触发器。

list all triggers in a PostgreSQL database using psql

您可以在最后一行看到,这是关联到该表的触发器。

方法 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” 关联的触发器。

img

这就是我们列出数据库中表上的触发器的三种方法。

结论

在本教程中,我们列出了 3 种方法来列出数据库中的触发器。在第一种方法中,通过使用 information_schema.triggers,我们可以列出与任何表关联的触发器。第二种方法是使用 psql 命令,最后,我们看到了使用 pg_trigger 系统表列出触发器的方法。所有这些方法都可以帮助我们列出触发器。