暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss每日一练第18天|触发器

原创 惊涛拍岸 2021-12-23
343

学习目标:学习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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论