postgresQL 如何仅在更新的行上应用触发器?

postgresSQL How to apply trigger only on updated row?

我正在尝试创建一个函数 + 触发器,当我的 table 上有一个名为 "nada" 的更新或插入时,它将把我的 "modif" 属性更新为当前日期。

代码运行良好,但所有行都是 affected.I 只需要更新行上的当前日期。

有什么想法吗?

到目前为止,这是我的代码:

CREATE OR REPLACE FUNCTION public.maj_modif()
    RETURNS "trigger" AS
        $BODY$
            BEGIN
                    NEW.modif:= (SELECT current_date);
                RETURN NEW;
            END;
        $BODY$
LANGUAGE plpgsql;

DROP TRIGGER IF EXISTS maj_modif ON public.nada;

CREATE TRIGGER maj_modif BEFORE INSERT OR UPDATE ON public.nada
    FOR EACH ROW
    EXECUTE PROCEDURE public.maj_modif();

如果我在触发器中尝试没有 "FOR EACH ROW" 的相同代码,我会得到这个错误:« new » is not affected yet (...) The structure of the registration line is not yet determined.

我假设您只希望触发器在实际更改任何列时触发。

这可以通过

来完成
CREATE TRIGGER maj_modif BEFORE UPDATE ON public.nada
   FOR EACH ROW
   WHEN OLD <> NEW
   EXECUTE PROCEDURE public.maj_modif();

这仅适用于 UPDATE,因为 INSERT OLD 未定义。定义不带 WHEN 子句的 INSERT 触发器。