Re: concurrent updates problem

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "Richard Huxton" <dev(at)archonet(dot)com>
Cc: mwaples(at)waples(dot)net, pgsql-general(at)postgresql(dot)org
Subject: Re: concurrent updates problem
Date: 2001-03-19 16:12:01
Message-ID: 19668.985018321@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

>> I have on a web application
>> update threads set views = views + 1 where forum_id = 1 and thread_id = 1

It should work to do

begin;
select * from threads where forum_id = 1 and thread_id = 1 FOR UPDATE;
update threads set views = views + 1 where forum_id = 1 and thread_id = 1;
end;

Note the FOR UPDATE to lock the row and the transaction wrapping to
define the scope of the lock. Without this I'd expect you to lose
some counter increments as a result of two processes doing the UPDATE
at about the same time (both will read the old value of "views" and
increment it by one).

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2001-03-19 16:17:02 Re: concurrent updates problem
Previous Message Richard Huxton 2001-03-19 15:48:53 Re: concurrent updates problem