Tom Lane wrote:
> "Olleg Samoylov" <olleg@mipt.ru> 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