Создал триггер события в Postgres, но не появляется? - PullRequest
0 голосов
/ 03 ноября 2018

Это на Postgres 10.3 под AWS RDS.

В приведенных ниже выдержках я использую только public для search_path.

Я пытаюсь адаптировать существующий триггер события, определенный следующим образом:

CREATE EVENT TRIGGER update_last_modified ON ddl_command_end
    WHEN tag IN ('CREATE TABLE')
    EXECUTE PROCEDURE mll_audit();

Который был создан некоторое время назад и выглядит так:

=> \df *modified*
                                List of functions
 Schema |         Name         | Result data type | Argument data types |  Type   
--------+----------------------+------------------+---------------------+---------
 public | update_last_modified | trigger          |                     | trigger

Новый триггер вызовет новую процедуру, но пока я просто пытаюсь проверить, могу ли я ее создать:

CREATE EVENT TRIGGER deltest_update_last_modified ON ddl_command_end
    WHEN tag IN ('CREATE TABLE')
    EXECUTE PROCEDURE mll_audit();

Это создает хорошо, по-видимому, но не появляется:

=> CREATE EVENT TRIGGER deltest_update_last_modified ON ddl_command_end
    WHEN tag IN ('CREATE TABLE')
    EXECUTE PROCEDURE mll_audit();
CREATE EVENT TRIGGER

rwe=> \df *deltest*modified*
                       List of functions
 Schema | Name | Result data type | Argument data types | Type 
--------+------+------------------+---------------------+------
(0 rows)

=> \df *modified*
                                List of functions
 Schema |   rwe=> \df *deltest*modified*
                       List of functions
 Schema | Name | Result data type | Argument data types | Type 
--------+------+------------------+---------------------+------
(0 rows)

=> \df *modified*
                                List of functions
 Schema |         Name         | Result data type | Argument data types |  Type   
--------+----------------------+------------------+---------------------+---------
 public | update_last_modified | trigger          |                     | trigger
(1 row)

=> select proname from pg_proc where proname like '%modified%';
       proname        
----------------------
 update_last_modified
(1 row)

Если я пытаюсь воссоздать, не удаляя его, он ошибается, что он уже существует:

=> CREATE EVENT TRIGGER deltest_update_last_modified ON ddl_command_end
->     WHEN tag IN ('CREATE TABLE')
->     EXECUTE PROCEDURE mll_audit();
ERROR:  event trigger "deltest_update_last_modified" already exists

Я чувствую, что, должно быть, мне не хватает чего-то простого. Я просто хочу создать это в публичной схеме.

1 Ответ

0 голосов
/ 03 ноября 2018

\df перечисляет функции, а не триггеры событий. \dy используется для отображения триггеров событий. У вас просто также есть функция с именем update_last_modified (возможно, непреднамеренно?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...