Re: BUG #1447: Sometimes rules don't work

Поиск
Список
Период
Сортировка
От Olleg Samoylov
Тема Re: BUG #1447: Sometimes rules don't work
Дата
Msg-id 41FDE6A1.90609@mipt.ru
обсуждение исходный текст
Ответ на Re: BUG #1447: Sometimes rules don't work  (Tom Lane <tgl@sss.pgh.pa.us>)
Список 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 по дате отправления:

Предыдущее
От: bradsnobar@netscape.net (Bradley D. Snobar)
Дата:
Сообщение: Re: BUG #1434: ERROR: type "bigserial" does not exist
Следующее
От: "Donald Fraser"
Дата:
Сообщение: postgresql-7.4.6-2PGDG.src.rpm broken for Redhat 7,8 or 9