Re: BUG #1447: Sometimes rules don't work - Mailing list pgsql-bugs

From Olleg Samoylov
Subject Re: BUG #1447: Sometimes rules don't work
Date
Msg-id 41FDE6A1.90609@mipt.ru
Whole thread Raw
In response to Re: BUG #1447: Sometimes rules don't work  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
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

pgsql-bugs by date:

Previous
From: bradsnobar@netscape.net (Bradley D. Snobar)
Date:
Subject: Re: BUG #1434: ERROR: type "bigserial" does not exist
Next
From: "Donald Fraser"
Date:
Subject: postgresql-7.4.6-2PGDG.src.rpm broken for Redhat 7,8 or 9