postgre简单存储过程+触发器demo

一个最简易的存储过程 + 触发器的demo

--创建一张test表,为了测试触发器
CREATE TABLE test(
    testcol	varchar(10)
);
--创建一张test_trigger_record表,为了测试触发器响应后执行的存储过程是否正常执行完毕
CREATE TABLE test_trigger_record(
    operation  text   NOT NULL,
    create_time  timestamp NOT NULL,
    userid text      NOT NULL,
    test	text
);

--创建trigger_audit函数(存储过程),当表操作是‘insert’时,往test_trigger_record表中插入一条数据
--values( 'insert', now(), current_user, NEW.testcol) --》NEW.testcol等同于插入数据的testcol列值
CREATE OR REPLACE FUNCTION trigger_audit() RETURNS TRIGGER AS $$
    BEGIN   
		--RAISE NOTICE日志输出,可在控制台查看执行日志,也可在X:\PostgreSQL\8.3\data\pg_log下的当天日期文件中看到日志输出
		RAISE NOTICE  'trigger_audit() --> 存储过程执行中';  
        IF(TG_OP = 'INSERT') THEN
            INSERT INTO test_trigger_record SELECT 'insert', now(), current_user, NEW.testcol;
        END IF;
        RETURN NULL; 
    END;
$$ LANGUAGE plpgsql;

--创建一个名为test_trigger的触发器绑定到test表中,表数据每次新增都执行一次
CREATE TRIGGER test_trigger AFTER INSERT ON test FOR EACH ROW EXECUTE PROCEDURE trigger_audit();
  
--往test表中做插入1条数据
INSERT INTO test (testcol)VALUES('测试触发器');

--查询触发器是否生效(插入一条test表的操作记录)
select * from test_trigger_record;

存储过程开发小知识:

1.在存储过程里面可以输出日志进行跟踪

RAISE NOTICE  ' 存储过程执行中';  
--在存储过程中定义变量
declare sql text;
-- 输出变量,会自动替换占位符% 
RAISE NOTICE  'trigger_audit() --> 存储过程中 sql : % ' , sql; 

2. 存储过程中拼接sql稍微麻烦点:

 拼接varchar类型变量时需要在变量左右机上 单引号 ', 在字符串内拼接就需要转义单引号,也就是使用三个 ‘ ,最后一个单引号还需要拼接E'\''进行转义

declare shift text;
 
 IF(TG_OP = 'INSERT') THEN
    strsql := 'UPDATE ' || TG_TABLE_NAME 
					    || E' set shift = '''|| shift 
					    ||''' where id= ''' || NEW.id
					    ||''' AND lot =''' || NEW.lot 
				    	||''' AND creat_dt = ''' || NEW.creat_dt   ||E'\'';
	EXECUTE (strsql); ---执行拼接后的sql

3. 当存储过程因为长时间未使用或没有备注导致需要在N多个存储过程中快速锁定需要修改的那个存储过程:

先把原有存储过程的触发效果触发一次(原本做了什么动作会触发就再做一次,记录执行时间)可在postgre安装目录下的\data\pg_log下的当天日期文件中看到刚刚执行过的存储过程的日志输出,不过是否输出日志取决于存储过程代码中是否有日志输出语句,或者存储过程中有EXECUTE (sql)语句执行也会被日志记录下来(存储过程的函数名会被日志输出),这样就能快速锁定需要修改的存储过程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

往事不堪回首..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值