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  (Tom Lane <tgl@sss.pgh.pa.us>)
Список 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 по дате отправления:

Предыдущее
От: "Dirk Cap"
Дата:
Сообщение: wcwidth
Следующее
От: "Michael Robinton"
Дата:
Сообщение: BUG #1449: JDBC client driver bug waiting to happen