学习目标:学习openGauss触发器
课程学习:
触发器是对应用动作的响应机制,当应用对一个对象发起DML操作时,就会产生一个触发事件(Event),如果该对象上拥有该事件对应的触发器,那么就会检查触发器的触发条件(Condition)是否满足,如果满足触发条件,那么就会执行触发动作(Action)。
部分学习内容如下:

课程作业:
1.创建源表和触发表,在源表上创建insert触发器,创建操作触发表的触发器函数
omm=# create table source_table(id integer,num integer);
CREATE TABLE
omm=# create table trigger_table(like source_table);
CREATE TABLE
omm=# create or replace function insert_func() returns trigger as
omm-# $$omm$#
declare
omm$# begin
omm$# insert into trigger_table values(new.id,new.num);
omm$# return new;omm$#
end
omm$# $$ language plpgsql;
CREATE FUNCTION
omm=# create trigger insert_trigger
omm-# before insert on source_table
omm-# for each row
omm-# execute procedure insert_func();
CREATE TRIGGER
2.在源表上执行insert操作,查看触发操作是否生效;禁用触发器后,再次查看触发操作是否生效
omm=# insert into source_table values(1,1),(2,2);
INSERT 0 2
omm=# select * from source_table;
id | num
----+-----
1 | 1
2 | 2
(2 rows)
omm=# select * from trigger_table;
id | num
----+-----
1 | 1
2 | 2
(2 rows)
omm=# alter table source_table disable trigger insert_trigger;
ALTER TABLE
omm=# insert into source_table values(3,3),(4,4);
INSERT 0 2
omm=# select * from source_table;
id | num
----+-----
1 | 1
2 | 2
3 | 3
4 | 4
(4 rows)
omm=# select * from trigger_table;
id | num
----+-----
1 | 1
2 | 2
(2 rows)
3.使用系统表PG_TRIGGER和\dS+查看触发器
omm=# select * from pg_trigger;
tgrelid | tgname | tgfoid | tgtype | tgenabled | tgisinternal | tgconstrrelid | tgconstrindid | tgconstraint | tgdefe
rrable | tginitdeferred | tgnargs | tgattr | tgargs | tgqual | tgowner
---------+----------------+--------+--------+-----------+--------------+---------------+---------------+--------------+-------
-------+----------------+---------+--------+--------+--------+---------
16451 | insert_trigger | 16459 | 7 | D | f | 0 | 0 | 0 | f
| f | 0 | | \x | | 10
(1 row)
omm=# \dS+ source_table
Table "public.source_table"
Column | Type | Modifiers | Storage | Stats target | Description
--------+---------+-----------+---------+--------------+-------------
id | integer | | plain | |
num | integer | | plain | |
Disabled triggers:
insert_trigger BEFORE INSERT ON source_table FOR EACH ROW EXECUTE PROCEDURE insert_func()
Has OIDs: no
Options: orientation=row, compression=no
4.重命名触发器
omm=# alter trigger insert_trigger on source_table rename to insert_t;
ALTER TRIGGER
5.删除触发器
omm=# drop trigger insert_t on source_table;
DROP TRIGGER
omm=# drop function insert_func();
DROP FUNCTION




