简体   繁体   中英

postgresSQL How to apply trigger only on updated row?

I'm trying to create a function + trigger that will update my "modif" attribut to current date when there is an update or insert on my table called "nada".

the code work well but all the rows are affected.I only want the current date on the rows that were updated.

Any idea ?

This is my code so far:

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();

If I try the same code without "FOR EACH ROW" in the trigger I get this erreur: « new » is not affected yet (...) The structure of the registration line is not yet determined.

I assume that you only want the trigger to fire if any columns were actually changed.

That can be done with

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

That only works for UPDATE , because on INSERT OLD is not defined. Define the INSERT trigger without the WHEN clause.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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