如何判断PostgreSQL中是否启用了触发器?

Hao*_*Hao 11 postgresql triggers status

我的googling-fu让我失望了.如何知道PostgreSQL触发器是否被禁用?

Raf*_*ael 9

这是我使用postresql的第一天,但​​我认为你可以通过pg_trigger系统表检查触发状态:http://www.postgresql.org/docs/current/static/catalog-pg-trigger.html

您需要的列是tgrelidtgenabled.

  • 目前最新的链接:http://www.postgresql.org/docs/current/static/catalog-pg-trigger.html (2认同)

tol*_*maz 8

下面的SQL将完成这项工作.它显示当前数据库中的所有触发器.

SELECT pg_namespace.nspname, pg_class.relname, pg_trigger.*
FROM pg_trigger
JOIN pg_class ON pg_trigger.tgrelid = pg_class.oid
JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace  
Run Code Online (Sandbox Code Playgroud)

如果tgenabled为'D',则触发器被禁用.所有其他值(此处记录)表明它以某种方式启用.

BTW.如果要检查特定表的触发器,则查询会更短:

SELECT * FROM pg_trigger
WHERE tgrelid = 'your_schema.your_table'::regclass
Run Code Online (Sandbox Code Playgroud)

regclass的类型让你从限定的表名到OID(对象ID)的简单方法.


Poc*_*and 5

SELECT EXISTS (
    SELECT  tgenabled
    FROM    pg_trigger
    WHERE   tgname='your_unique_trigger_name' AND
            tgenabled != 'D'
);
Run Code Online (Sandbox Code Playgroud)

如果您知道触发器名称是唯一的,如果启用了your_unique_trigger_name触发器,则上面将返回 true (t) :

 exists
--------
 t
(1 row)
Run Code Online (Sandbox Code Playgroud)

如果禁用,它将返回 false (f)。