VastbaseG100

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

Menu

ALTER TRIGGER

功能描述

Vastbase G100支持修改触发器,Vastbase G100 V2.2 Build 13在Oracle兼容模式下支持禁用和解禁触发器语法。

  • 若不存在与待禁用触发器同名的触发器,则可以将其禁用。

  • 若存在与待禁用触发器同名的触发器,则执行不生效。

注意事项

  • 禁用和解禁触发器功能仅在数据库兼容模式为Oracle时支持(即数据库实例初始化时指定DBCOMPATIBILITY='A')。

  • 禁用和解禁触发器语法需要用户具有触发器的owner权限(即为PG_TRIGGER.tgowner中记录的用户)或超级用户权限。

  • 当禁用的触发器存在同名触发器,则执行不成功。

语法格式

ALTER TRIGGER name DISABLE
ALTER TRIGGER name ENABLE [ ALWAYS | REPLICA ]
ALTER TRIGGER name ON table_name RENAME TO new_name

参数说明

  • name

    要修改的现有触发器名。

  • new name

    触发器的新名称。

  • table_name

    触发器依赖的表的名称。

  • DIASBLE | ENABLE

    • DIASBLE表示禁用触发器。

    • ENABLE表示对触发器解禁。

  • ALWAYS | REPLICA

    • 被配置为ENABLE ALWAYS的触发器的触发不会考虑当前复制模式,配置为ENABLE ALWAYS的触发器都将触发。

    • 被配置为ENABLE REPLICA的触发器只有在会话处于“replica”模式时才将被触发。

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

示例

示例1 修改触发器名。

1、创建测试表和触发器。

create table tb_1
(
  bill_id number(5) primary key,
  amount number(5)
);

CREATE OR REPLACE TRIGGER tri_example
BEFORE
     UPDATE OR DELETE OR INSERT
ON tb_1
  FOR EACH ROW 
BEGIN
  dbms_output.put_line('tri_example Trigger called.');
END;
/

2、重命名触发器名。

ALTER TRIGGER tri_example ON tb_1 RENAME TO tri_example_new;

3、查看修改后的触发器信息。

select tgname from pg_trigger where tgname='tri_example_new';

查询结果为如下,表示修改成功:

     tgname
-----------------
 tri_example_new
(1 row)

示例2 禁用和解禁有触发器函数和没有触发器函数的insert触发器。

1、创建测试表。

create table tb_old(id int,a1 varchar(2)); 
create table tb_new(id int,a1 varchar(2)); 

2、创建触发器函数。

create or replace function fun_tri_1()return trigger 
as 
begin 
insert into tb_new values(new.id,new.a1); 
return new; 
end; 
/ 

3、创建触发器tri_1和tri_2。

create trigger tri_1 
after insert on tb_old 
for each row 
execute procedure fun_tri_1(); 

create trigger tri_2 
before insert on tb_old 
for each row 
begin 
insert into tb_new values(new.id,new.a1); 
end; 
/

4、有触发器函数时禁用和解禁触发器。

  • 禁用触发器,并查看系统表PG_TRIGGER的tgenabled字段,其值记录了触发器在何种模式下触发。

    alter trigger tri_1 disable;
    select tgenabled from pg_trigger where tgname='tri_1';
    

    返回结果为D,表示触发器被禁用:

    tgenabled
    -----------
    D
    (1 row)
    
  • 解禁触发器,并查看系统表PG_TRIGGER的tgenabled字段,其值记录了触发器在何种模式下触发。

    alter trigger tri_1 enable;
    select tgenabled from pg_trigger where tgname='tri_1';
    

    返回结果为O,表示触发器在“origin”和“local”模式下触发:

    tgenabled
    -----------
    O
    (1 row)
    

5、没有触发器函数时禁用和解禁触发器。

  • 禁用触发器,并查看系统表PG_TRIGGER的[tgenabled]()字段,其值记录了触发器在何种模式下触发。

    alter trigger tri_2 disable;
    select tgenabled from pg_trigger where tgname='tri_2';
    

    返回结果为D,表示触发器被禁用:

    tgenabled
    -----------
    D
    (1 row)
    
  • 解禁触发器,并查看系统表PG_TRIGGER的[tgenabled]()字段,其值记录了触发器在何种模式下触发。

    alter trigger tri_2 enable;
    select tgenabled from pg_trigger where tgname='tri_2';
    

    返回结果为O,表示触发器在“origin”和“local”模式下触发:

    tgenabled
    -----------
    O
    (1 row)
    

相关链接

PG_TRIGGERCREATE TRIGGERDROP TRIGGER