Thread: PL/pgSQL triggers ON INSERT OR UPDATE

PL/pgSQL triggers ON INSERT OR UPDATE

From
san@cobalt.rmnet.it
Date:
Hello, I'm trying to set up a trigger on insert or update
but when using the predefined variable ``OLD'' I get a
NOTICE from the trigger function about OLD not being defined yet.

Of course OLD is not defined when the function is triggered on INSERT
event, and I did not mention it if not inside a conditional block
checking for the TG_OP variable being 'UPDATE'.

For better understanding here is some code:

BEGIN
    IF TG_OP = 'UPDATE' THEN
        IF OLD.id <> NEW.id THEN
            -- do the work
        END IF
    END IF;
END;

Even when TG_OP != 'UPDATE' (INSERT event) I still get an error
message from the pl/pgsql compiler (the first time the trigger is fired).

What should I do then ? Is it still possible to use the same function
for UPDATE OR INSERT events ?

TIA

--san;

Re: PL/pgSQL triggers ON INSERT OR UPDATE

From
"Aasmund Midttun Godal"
Date:
First, I may be wrong but I do think they would prefer if you did not cross-post (especially to hackers).

Second I think it probably make more sense to make two different triggers here.

If you really wanted to do it that way you might want to try executing that part.

Regards,

Aasmund.

On Mon, 22 Oct 2001 23:25:44 +0200, san@cobalt.rmnet.it wrote:
> Hello, I'm trying to set up a trigger on insert or update
> but when using the predefined variable ``OLD'' I get a
> NOTICE from the trigger function about OLD not being defined yet.
> 
> Of course OLD is not defined when the function is triggered on INSERT
> event, and I did not mention it if not inside a conditional block
> checking for the TG_OP variable being 'UPDATE'.
> 
> For better understanding here is some code:
> 
> BEGIN
>     IF TG_OP = 'UPDATE' THEN
>         IF OLD.id <> NEW.id THEN
>             -- do the work
>         END IF
>     END IF;
> END;
> 
> Even when TG_OP != 'UPDATE' (INSERT event) I still get an error
> message from the pl/pgsql compiler (the first time the trigger is fired).
> 
> What should I do then ? Is it still possible to use the same function
> for UPDATE OR INSERT events ?
> 
> TIA
> 
> --san;
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster

Aasmund Midttun Godal

aasmund@godal.com - http://www.godal.com/
+47 40 45 20 46


Re: PL/pgSQL triggers ON INSERT OR UPDATE

From
san
Date:
From postgresql@envisity.com  Tue Oct 23 18:33:27 2001Content-Disposition: inlineFrom: "Aasmund Midttun Godal"
<postgresql@envisity.com>To:san@cobalt.rmnet.itCc: pgsql-sql@postgresql.orgSubject: Re: [SQL] PL/pgSQL triggers ON
INSERTOR UPDATEDate: Tue, 23 Oct 2001 16:31:12 GMTX-Mailer: Googley-Moogley
 
First, I may be wrong but I do think they would prefer if youdid not cross-post (especially to hackers).
Second I think it probably make more sense to make two differenttriggers here.
If you really wanted to do it that way you might want to tryexecuting that part.
Regards, Aasmund.

Thank you, I should have been *really* tired that night, but it is working
now ... No more complaints about missing OLD variable. It works as I wanted.

One trigger for both events, checks for TG_OP.

Sorry about cross-posting attempt ;)

please don't post that mail

--san;