Re: How to avoid the Mutating Triggers ??

From: "Yudha Setiawan" <yudha(at)BonBon(dot)net>
To: <pgsql-admin(at)postgresql(dot)org>, "Stephan Szabo" <sszabo(at)megazone23(dot)bigpanda(dot)com>
Subject: Re: How to avoid the Mutating Triggers ??
Date: 2003-02-20 02:29:00
Message-ID: 004c01c2d887$d801b3d0$ea00a8c0@yudha
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

Dear Szabo, You were wrote;

> Well, what have you tried? For the simple
> case (pointer is not changing), a not terribly
> efficient version might be something like:
>
> create or replace function dorecalcupd() returns trigger as
> 'declare
> last int;
> begin
> SELECT INTO last qty FROM foo where pointer < NEW."pointer" ORDER BY
> pointer desc LIMIT 1;
> NEW.qty := last + NEW."in" - NEW."out";
> if (NEW.pointer = OLD.POINTER AND (NEW."in" != OLD."in" or NEW."out" !=
> OLD."out")) then
> UPDATE foo set qty = (select sum(f."in") - sum(f."out") from foo f where
> f.pointer<pointer)
> where pointer>NEW.pointer;
> end if;
> return NEW;
> end;' language 'plpgsql';
>
> In this case the trigger does cause requests to the same trigger for the
> later rows, but since only qty is changing it does nothing.
>
> It's more complicated when you deal with the pointer moving case.

Thank's a Lot for all milist especialy for dear Stephan Szabo. I'm Sorry
"Pointer" on my ilustration "IS NOT a FIELD". it's just information for
me, to show you where is exactly the position of record / Pointer that
I want to Change.
Perhaps you have another best one, please...??

Thank You very much and,
GOD Bless You All.

Yudha Setiawan.
VoIP
No. : 628899911223344

In response to

Responses

Browse pgsql-admin by date

  From Date Subject
Next Message Stephan Szabo 2003-02-20 02:37:36 Re: How to avoid the Mutating Triggers ??
Previous Message Ed L. 2003-02-20 01:11:33 Re: server won't shutdown