繁体   English   中英

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

[英]postgresSQL How to apply trigger only on updated row?

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

代码运行良好,但所有行均受影响。我只希望更新后的行上的当前日期。

任何想法 ?

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

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»尚未受影响(...)尚未确定注册行的结构。

我假设您只希望在实际更改任何列的情况下触发触发器。

那可以做到

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触发器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM