GaussDB表触发器使用
注意事项:
- 当前仅支持在普通行存表上创建触发器,不支持在列存表、临时表、unlogged表等类型表上创建触发器。
- 如果为同一事件定义了多个相同类型的触发器,则按触发器的名称字母顺序触发它们。
- 一个触发器只能作用在一张表上,对创建的触发器数量无限制但一个表上的触发器越多,性能消耗越大。
- 触发器常用于多表间数据关联同步场景,对SQL执行性能影响较大,不建议在大数据量同步及对性能要求高的场景中使用。
- 当触发器满足如下条件时,触发语句能和触发器一起下推到DN执行并提升触发器执行性能:
- 开关enable_trigger_shipping和enable_fast_query_shipping开启(默认均开启)。
- 源表触发器使用的触发器函数为plpgsql类型(推荐类型)。
- 源表与触发表分布键的类型、数量完全相同,均为行存表,且所属相同的nodegroup。
- 原INSERT/UPDATE/DELETE语句条件中包含所有分布键与NEW/OLD等值比较表达式。
- 原INSERT/UPDATE/DELETE语句在没有触发器的情况下原本就能queryshipping。
- 源表上只有INSERT/UPDATE/DELETE AFTER/BEFORE FOR EACH ROW六类触发器,且所有触发器都可下推。
- “OF column_name”只能在行触发器中使用,且该列数据类型不能为LOB。
- 触发器内部不能出现DDL和DCL操作,普通用户不可以创建系统用户对象。
- 触发事件为数据添加(BEFORE | AFTER INSERT)时,行触发器内部不能出现向被触发表中添加数据的操作;
- 触发事件为数据更改(BEFORE | AFTER UPDATE)时,行触发器内部不能出现更改被触发表中数据的操作;
- 触发事件为数据删除(BEFORE | AFTER DELETE)时,行触发器内部不能出现删除被触发表中数据的操作。
- 在一个表上最多可创建8个触发器。
- 不支持在本地临时表上创建触发器。
- 普通用户的触发器不允许基于SYS用户表进行创建。
使用步骤
1.创建源表及触发表
创建源表
create table all_activity AS select * from pgxc_stat_activity limit 0;
创建触发表
create table test_trigger_des_tbl AS select * from pgxc_stat_activity limit 0;
2.创建触发器函数
CREATE OR REPLACE FUNCTION tri_insert_func() RETURNS TRIGGER AS
$$
DECLARE
BEGIN
INSERT INTO test_trigger_des_tbl(usename) VALUES (NEW.usename);
RETURN NEW;
END
$$ LANGUAGE PLPGSQL;
3.创建普通表触发器
CREATE TRIGGER insert_all_activity_trigger BEFORE INSERT ON all_activity FOR EACH ROW EXECUTE PROCEDURE tri_insert_func();
4.插入数据至触发表all_activity
insert into all_activity(usename) values('aa');
5.查询test_trigger_des_tbl
postgres=# select * from test_trigger_des_tbl;
coorname | datid | datname | pid | usesysid | usename | application_name | client_addr | client_hostname | client_por
t | backend_start | xact_start | query_start | state_change | waiting | enqueue | state | resource_pool | query_id | q
uery | connection_info
----------+-------+---------+-----+----------+---------+------------------+-------------+-----------------+-----------
--+---------------+------------+-------------+--------------+---------+---------+-------+---------------+----------+--
-----+-----------------
| | | | | aa | | | |
| | | | | | | | | |
|
(1 row)
- 点赞
- 收藏
- 关注作者
评论(0)