Re: Lock table, best option?

From: Josh Kupershmidt <schmiddy(at)gmail(dot)com>
To: Andre Lopes <lopes80andre(at)gmail(dot)com>
Cc: postgresql Forums <pgsql-general(at)postgresql(dot)org>
Subject: Re: Lock table, best option?
Date: 2010-04-26 02:59:09
Message-ID: t2n4ec1cf761004251959l7c639186x96a36e307adc408b@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Sat, Apr 24, 2010 at 4:46 PM, Andre Lopes <lopes80andre(at)gmail(dot)com> wrote:
> I need to do a SELECT and an UPDATE, but I will have concurrent processes
> doing the same task.
>
> How can I prevent that the concurrent task don't have the same results in
> the SELECT? Locking a table? How can I do that?

It sounds like you might be looking for SELECT ... FOR UPDATE, see:
http://www.postgresql.org/docs/current/static/sql-select.html

Basically, you could have each transaction issue SELECT ... FOR UPDATE
for rows intended to be updated later. Only one transaction would be
able to acquire the necessary locks for the same rows at the same
time; the other transaction(s) would block until the locks are
released by the first transaction's commit, and then would see the new
values. This paragraph assumes you're using the default "read
committed" transaction isolation level, you might want to read more
at:
http://www.postgresql.org/docs/current/static/transaction-iso.html

And if you really want to know about full table locking, you can read more at:
http://www.postgresql.org/docs/current/static/sql-lock.html

though it doesn't sound like you'll actually need full table locks.

Josh

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Yan Cheng CHEOK 2010-04-26 05:51:21 Deadlock occur while creating new table to be used in partition.
Previous Message Hiroshi Inoue 2010-04-26 00:19:49 Re: [GENERAL] trouble with to_char('L')