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
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 |