GaussDB表触发器使用

举报
飞不起来的小松鼠 发表于 2022/02/09 08:56:36 2022/02/09
【摘要】 表触发器

注意事项:

  • 当前仅支持在普通行存表上创建触发器,不支持在列存表、临时表、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)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。