更新触发器未在plpgsql中触发

时间:2015-10-23 13:11:14

标签: sql database postgresql triggers plpgsql

我在表 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();

当执行插入操作时,正在触发插入触发器。但是当执行更新操作时,没有触发更新触发器。为什么?

1 个答案:

答案 0 :(得分:1)

字符串比较在Postgres中区分大小写。请尝试使用TG_OP = 'UPDATE'代替TG_OP = 'update'