Tom Lane wrote:
"Olleg Samoylov" <[EMAIL PROTECTED]> writes:

create rule history_i as on insert to history do (update abonent set
money=money+new.money where abonent=new.abonent);

insert into history (abonent,money) select abonent,-(money.money+5) as pay
from
   ( select abonent,sum(money) as money from history where money<0 group by
abonent) money
   where money.money+5>0;

What happens in the above is that the "new.money" placeholder is
replaced by the subselect from the INSERT command, and since the rule
fires after the insert itself is done, you get different results from
the second evaluation of the subselect.

IMHO, this is incorrect.

You should be using a trigger for this sort of thing, not a rule.
Rules have their uses, but propagating copies of data from one place
to another is generally not one of them.

If you don't plan to fix this, this "feature" must be well documented.

--
Olleg

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature



Reply via email to