VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

管理 DDL 触发器

本节主要介绍管理 DDL 触发器的方法。

修改 DDL 触发器

语法格式

   ALTER EVENT TRIGGER name DISABLE 
   ALTER EVENT TRIGGER name ENABLE [REPLICA  ALWAYS ]
   ALTER EVENT TRIGGER name OWNER TO  {new_owner | CURRENT_USER |SESSION_USER}
   ALTER EVENT TRIGGER name RENAME TO new name

参数说明

  • name

    要修改的现有触发器的名称。

  • new_owner

    该 DDL 触发器的新拥有者的用户名。

  • new_name

    该 DDL 触发器的新名称。

  • DISABLE | ENABLE

    该参数用于配置事件 DDL 触发器是否被触发。一个被禁用的触发器对系统来说仍然是可知的,但是当其触发事件发生时却不会执行它。

  • REPLICA

    触发器触发机制受配置变量session_replication_role的影响,当复制角色为“origin”(默认值)或“local”时,将触发简单启用的触发器。

    配置为ENABLE REPLICA的触发器仅在会话处于“replica”模式时触发。

  • ALWAYS

    无论当前复制模式如何,配置为 ENABLE ALWAYS 的触发器都将触发。

删除 DDL 触发器

语法格式

   DROP EVENT TRIGGER [IF EXISTS ] name [CASCADE | RESTRICT]

参数说明

  • IF EXISTS

    如果指定的 DDL 触发器不存在,则不会抛出一个错误而是返回一个提示。

  • name

    要删除的 DDL 触发器的名称。

  • CASCADE

    表示级联删除所有依赖于触发器的对象。

  • RESTRICT

    如果有任何对象依赖于该触发器,则拒绝删除。缺省为 RESTRICT。

示例

示例: 修改 DDL 触发器。

1、创建 DDL 触发器函数。

   CREATE OR REPLACE FUNCTION eth1() RETURNS event_trigger AS 
   $$ 
   BEGIN RAISE NOTICE 'test_event_trigger: % %',tg_event,tg_tag; 
   END 
   $$ 
   LANGUAGE plpgsql;

2、创建 DDL 触发器。

   CREATE EVENT TRIGGER logon_event_trigger 
   AFTER logon ON database 
   EXECUTE PROCEDURE eth1();

3、执行以下语句修改 DDL 触发器名称。

   ALTER EVENT TRIGGER logon_event_trigger RENAME TO test_eventtri_new;

4、系统表中查询更名后的 DDL 触发器。

   SELECT * FROM pg_event_trigger WHERE evtname = 'test_eventtri_new';

结果返回如下:

         evtname      | evtevent | evtowner | evtfoid | evtenabled | isschema | evttags
   -------------------+----------+----------+---------+------------+----------+---------
    test_eventtri_new | logon    |       10 |   18586 | O          | f        |
   (1 row)