更新触发器未在 plpgsql 中触发
Posted
技术标签:
【中文标题】更新触发器未在 plpgsql 中触发【英文标题】:Update trigger not firing in plpgsql 【发布时间】:2015-10-23 13:11:13 【问题描述】:我在表 nums 上有一个更新触发器和插入触发器,该表有两列,即 name,number。每当更新或插入数据时然后执行这些触发器。
CREATE OR REPLACE FUNCTION add_log()
RETURNS trigger AS
$BODY$
DECLARE
account_type varchar;
BEGIN
IF (TG_OP = 'INSERT') THEN
INSERT INTO log
VALUES(
now(),
'inserted data is name : '||NEW.name||' num : '||NEW.number
);
RETURN NEW;
ELSEIF (TG_OP = 'update') THEN
INSERT INTO log VALUES
(
now(),
'updated record with old num :'||OLD.number||' with new num : '||NEW.number
);
RETURN OLD;
END IF;
RETURN null;
END;
$BODY$
LANGUAGE plpgsql
创建触发器:
CREATE TRIGGER add_log_trigger
AFTER INSERT OR UPDATE
ON nums
FOR EACH ROW
EXECUTE PROCEDURE add_log();
执行插入操作时,会触发插入触发器。但是执行更新操作时,不会触发更新触发器。为什么?
【问题讨论】:
请添加您使用的create trigger()
语句
@a_horse_with_no_name yes.updated 问题。
字符串比较在 Postgres 中区分大小写。试试TG_OP = 'UPDATE'
而不是TG_OP = 'update'
@a_horse_with_no_name 是的。没错。明白了。谢谢。
【参考方案1】:
字符串比较在 Postgres 中区分大小写。试试TG_OP = 'UPDATE'
而不是TG_OP = 'update'
。
【讨论】:
以上是关于更新触发器未在 plpgsql 中触发的主要内容,如果未能解决你的问题,请参考以下文章