Re: How to avoid the Mutating Triggers ?? - Mailing list pgsql-admin

From Yudha Setiawan
Subject Re: How to avoid the Mutating Triggers ??
Date
Msg-id 004c01c2d887$d801b3d0$ea00a8c0@yudha
Whole thread Raw
In response to Re: How to avoid the Mutating Triggers ??  (Stephan Szabo <sszabo@megazone23.bigpanda.com>)
Responses Re: How to avoid the Mutating Triggers ??
List 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




pgsql-admin by date:

Previous
From: "Ed L."
Date:
Subject: Re: server won't shutdown
Next
From: Stephan Szabo
Date:
Subject: Re: How to avoid the Mutating Triggers ??