管理 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)