Как узнать, включен ли триггер в PostgreSQL? - PullRequest
7 голосов
/ 01 апреля 2009

Мой гугл-фу подводит меня. Как узнать, отключен ли триггер PostgreSQL?

Ответы [ 3 ]

8 голосов
/ 01 апреля 2009

Это мой первый день с postresql, но я думаю, что вы можете проверить состояние триггера через системную таблицу pg_trigger: http://www.postgresql.org/docs/current/static/catalog-pg-trigger.html

Вам понадобятся следующие столбцы: tgrelid и tgenabled.

.
6 голосов
/ 14 апреля 2015

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  

Если tgenabled равно 'D', триггер отключен. Все остальные значения (задокументированные здесь ) указывают, что он каким-то образом включен.

КСТАТИ. Если вы хотите проверить триггеры для конкретной таблицы, запрос будет немного короче:

SELECT * FROM pg_trigger
WHERE tgrelid = 'your_schema.your_table'::regclass

приведение к типу regclass упрощает путь от квалифицированного имени таблицы до OID (идентификатор объекта). 1021 *

4 голосов
/ 20 января 2016
SELECT EXISTS (
    SELECT  tgenabled
    FROM    pg_trigger
    WHERE   tgname='your_unique_trigger_name' AND
            tgenabled != 'D'
);

Если вы знаете, что имя триггера уникально, вышеприведенное вернет true (t), если включен your_unique_trigger_name :

 exists
--------
 t
(1 row)

Если отключено, возвращается false (f).

...