BUG #1447: Sometimes rules don't work
От | Olleg Samoylov |
---|---|
Тема | BUG #1447: Sometimes rules don't work |
Дата | |
Msg-id | 20050128151333.451FF9A59E3@www.postgresql.com обсуждение исходный текст |
Ответы |
Re: BUG #1447: Sometimes rules don't work
|
Список | pgsql-bugs |
The following bug has been logged online: Bug reference: 1447 Logged by: Olleg Samoylov Email address: olleg@mipt.ru PostgreSQL version: 7.4.6, 8.0.0 Operating system: x86_64-pc-linux-gnu, compiled by GCC x86_64-linux-gcc (GCC) 3.3.5 (Debian 1:3.3.5-6) Description: Sometimes rules don't work Details: Test below show this bug. This is very simplified query from real billing system. If abonent get service less then $5 per month, the billing must get other. --create structure -- table with abonent and his money create table abonent (abonent integer primary key, money double precision not null default 0); -- table with history of money change create table history (abonent integer not null references abonent, money double precision not null); -- to change money enough add record to table history create rule history_i as on insert to history do (update abonent set money=money+new.money where abonent=new.abonent); -- insert example values -- one abonent insert into abonent values (1); -- it get service for $2 insert into history values (1,-2); -- Always must be 0, due to rule history_i select abonent.money-history.money from (select sum(money) as money from abonent) abonent, (select sum(money) as money from history) history; -- Okey -- payment per month, simplified but still show bug -- minimal payment $5 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; -- must be 0 select abonent.money-history.money from (select sum(money) as money from abonent) abonent, (select sum(money) as money from history) history; -- fail
В списке pgsql-bugs по дате отправления: