更新触发器未在 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 中触发的主要内容,如果未能解决你的问题,请参考以下文章

使用 plpgsql 更新函数中的列

OnLocationChanged 未在某些设备上触发

模态弹出窗口未在 C# 中触发

Oracle 异常未在触发器中捕获

自定义元框 Save_Post 回调未在 functions.php 中触发

如何在 plpgsql 函数中获取表的关键字段?