我正在使用PostgreSQL 13。我目前正在研究触发器。问题是:我怎样才能看到到目前为止我创建了哪些触发器?我在网上找到了2种方法:
方法一:
-- Посмотреть, какие есть триггеры:
select *
from information_schema.triggers;
方法二:
-- Посмотреть триггеры:
select *
from pg_trigger;
第一种方法看起来信息更丰富一些。一般来说,information_schema.triggers和pg_trigger表之间还有其他区别吗?


一切
information_schema都是 SQL 规范所描述的数据库结构信息的表示。也就是说,它是可移植到其他 DBMS 的,作为一个标准,结构只根据标准的要求而改变(也就是说,我们可以说它没有改变),但是,正如预期的那样,它不会显示 DBMS 的特性,而这些特性是不在 SQL 规范中。information_schema.triggers- 这就是view上面的内容pg_trigger(+一些东西),在 psql 中,该命令\d+ information_schema.triggers甚至会显示该视图是如何声明的:pg_trigger这是系统目录 ( ) 的一部分pg_catalog,实际上存储有关所有触发器的数据,包括使所有 postgresql 功能正常工作所需的属性。与 不同的是information_schema,对象pg_catalog不仅不承诺持久性,相反,它们承诺在每个新的主要版本中(例如,从 postgresql 13 升级到 14 时),pg_catalog如果 postgresql 开发人员有必要,任何内容都可以以任何方式更改。一些原因。当然,这里的关键是“如果需要的话”,所以它通常pg_catalog不会改变太多。也就是说,两种方法本质上是相同的,信息来源相同。但这些方法之间存在真正的区别:根据标准的要求,请注意我引用的定义中的 WHERE
view:它检查访问权限。查询 cpg_trigger不考虑表结构的秘密,并且会向您显示触发器,包括那些 information_schema 由于缺乏用户权限而隐藏的触发器。