Re: on insert when ... do instead update

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: askel <dummy666(at)mail(dot)ru>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: on insert when ... do instead update
Date: 2008-03-16 16:43:29
Message-ID: 26617.1205685809@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

askel <dummy666(at)mail(dot)ru> writes:
> Hello everybody!
> I'm having problem with postgresql 8.3 (not sure if it is related to
> this particular version). Suppose we have accounting system database
> with the following rule (no other rules are there):

> create or replace rule update_or_create_balance as
> on insert to ledger when exists (select 1 from ledger where
> account=new.account) do instead update ledger set debit=debit
> +new.debit, credit=credit+new.credit, balance=balance+new.balance
> where account=new.account;

> What could be the reason of the following considering ledger table is
> empty:

> insert into ledger values(1,100,0,100);
> select * from ledger;
> 1 | 200.00 | 0.00 | 200.00
> (1 row)

You missed reading the bit in the docs where it says that a query added
by ON INSERT is done after the original query. In the above example,
the WHEN clause will *always* succeed.

regards, tom lane

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Martin Gainty 2008-03-16 16:47:18 Re: how to make this database / query faster
Previous Message Richard Broersma 2008-03-16 15:25:40 Re: how to make this database / query faster