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

时间:2019-08-09 10:29:45

标签: postgresql plpgsql database-trigger

我正在尝试创建一个函数+触发器,以在我的表中名为“ 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»尚未受影响(...)尚未确定注册行的结构。

1 个答案:

答案 0 :(得分:1)

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

可以做到

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

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