首页 > 其他分享 >MogDB-openGauss触发器简介(2)

MogDB-openGauss触发器简介(2)

时间:2024-03-15 15:23:14浏览次数:26  
标签:INSERT 触发器 log MogDB warehouse NEW openGauss name

MogDB/opengauss 触发器简介(2)

针对触发对象的触发事件一旦发生,就会激活触发器,触发器首先会检查触发条件,只有在满足触发条件的情况下,才会被真正地执行。其中元组级的触发器可以将更新前后的值嵌入到触发器的触发条件中。

  • NEW.column_name:UPDATE 或 INSERT 事件对应“新”元组,column_name 对应新元组上的对应的列值

  • OLD.column_name:UPDATE 或 DELETE 事件对应“老”元组,column_name 对应老元组上的列值

触发条件中包含 NEW 元组对应的列值。具体语句如下:

CREATE TRIGGER after_insert
 AFTER INSERT
 ON warehouse
 FOR EACH ROW
 WHEN (NEW.w_id>10)
 ...

触发器的动作主要是执行一个函数,在创建触发器之前,需要创建一个函数,如果返回值是 Trigger,那么该函数就是触发器函数,否则是普通函数。同一个触发器可以指定多个触发事件,每个事件发生时都能激活触发器来执行触发器的动作。

在 warehouse 表上创建一个完整的触发器,触发器的工作是在 wh_log 表中记录 DELETE/UPDATE/INSERT 操作的具体信息,实现语句如下:

CREATE TABLE wh_log
(
    event VARCHAR(10),
    time_stamp TIMESTAMP,
    w_id SMALLINT,
    w_name VARCHAR(10)
);

CREATE FUNCTION record_warehouse_log()
RETURNS TRIGGER AS $warehouse_log$
BEGIN
IF (TG_OP ='DELETE') THEN
INSERT INTO wh_log SELECT 'D', now(), OLD.w_id, OLD.w_name;
RETURN OLD;
ELSEIF (TG_OP ='UPDATE') THEN
INSERT INTO wh_log SELECT 'U', now(), NEW.w_id, NEW.w_name;
RETURN NEW;
ELSEIF (TG_OP ='INSERT') THEN
INSERT INTO wh_log SELECT 'I', now(), NEW.w_id, NEW.w_name;
RETURN NEW;
END IF;
RETURN NULL;
END;
$warehouse_log$ LANGUAGE plpgsql;

CREATE TRIGGER warehouse_log
AFTER INSERT OR UPDATE OR DELETE ON warehouse
FOR EACH ROW EXECUTE PROCEDURE record_warehouse_log();

如果需要删除触发器,可以使用 SQL 中的 DROP TRIGGER 命令。

DROP TRIGGER warehouse_log;

标签:INSERT,触发器,log,MogDB,warehouse,NEW,openGauss,name
From: https://www.cnblogs.com/renxyz/p/18075446

相关文章

  • zabbix监控MogDB-openGauss之采集prometheus数据
    zabbix监控MogDB/openGauss之采集prometheus数据本文出处:https://www.modb.pro/db/187462前言市场上比较的监控方式有两种:zabbix和prometheus架构,对于MogDB/openGauss数据库来说,已经通过grafana+prometheus+opengauss_exporter的方式完成了监控部署,如何通过zabb......
  • 配置MogDB openGauss的grafana 的dashboard
    配置MogDB/openGauss的grafana的dashboard本文出处:https://www.modb.pro/db/188684概述我们已经介绍了prometheus+grafana+opengauss_exporter完成对MogDB/openGauss数据库的监控,但这只是第一步,我们还需要通过grafana的dashboard查看各个关注的指标项,本文主要......
  • openGauss开机自启动
    openGauss开机自启动在centos7.6操作系统上设置openGauss开机自启动,我们先来了解一下自定义服务的配置文件组成部分,共分为[Unit]、[Service]、[Install]三个部分。[Unit]Description=当前服务的简单描述Documentation=服务配置文件的位置Before=在某服务之前启动Aft......
  • openGauss与postgresql日常使用差异
    openGauss与postgresql日常使用差异密码加密postgresql默认密码加密方式是md5。openGauss默认密码加密方式是sha256。使用navicate、pgadmin3等客户端开发工具访问og,需要修改加密方式。如果在本地用用户名密码登陆数据库没问题。但是用其他工具连接数据......
  • PostgreSQL与openGauss之分区性能
    PostgreSQL与openGauss之分区性能概述PostgreSQL与openGauss分区表定义差异,请参考https://www.modb.pro/db/41393。openGauss1.1.0开始支持hash/list分区,hash分区表最多支持64个分区,否则会报:ERROR:Un-supportfeatureDETAIL:Thepartition’slengthshouldbe......
  • PostgreSQL与openGauss之关键字
    PostgreSQL与openGauss之关键字日常数据库运维的过程中可能对数据库关键字关注点并不是很高,但在程序开发的过程中,数据库对象建模要尽可能的避开数据库关键字的使用,否则在后续开发过程中需要用到各种转译的方法来将关键字转换为普通字符,会非常的麻烦。最近在openGauss上执行......
  • openGauss分区使用样例
    openGauss分区使用样例概述openGauss1.1.0版本开始,分区方式分为三种,分别是RANGE、HASH和LIST,官方文档中对于分区表的使用样例比较少,这里对各种分区使用方式做一下整理,方便以后快速调整使用。范围分区VALUESLESSTHAN语法格式分区策略的分区键最多支持4列分区键支持......
  • openGauss行存与列存
    openGauss行存与列存列存表限制列存表不支持数组。列存表的数量建议不超过1000个。列存表的表级约束只支持PARTIALCLUSTERKEY,不支持主外键等表级约束。列存表的字段约束只支持NULL、NOTNULL和DEFAULT常量值。列存表不支持alter命令修改字段约束。列存表支持......
  • openGauss监控之exporter部署
    openGauss监控之exporter部署概述opengauss_exporter是为openGauss数据库量身打造的数据采集工具,配合当前最受欢迎的监控报警框架prometheus+grafana组合实时展示数据库信息,为openGauss数据库的平稳运行保驾护航。opengauss_exporter同openGauss数据库一样是开源......
  • MogDB openGauss 角色切换后sequence为什么不连续
    本文出处:https://www.modb.pro/db/569272背景今天在客户现场做高可用切换测试,为了验证数据库节点角色切换后无数据丢失,我单独创建一张使用了自增sequence的表,通过vip方式访问数据库,并1s插入一条数据。因为数据库本身是通过benchmarksql工具加压的,数据库服务器的CPU使......