"select for update" confusion - Mailing list pgsql-general

From Ken Godee
Subject "select for update" confusion
Date
Msg-id 405E2EFF.4050904@perfect-image.com
Whole thread Raw
Responses Re: "select for update" confusion
List pgsql-general
I'm trying to build a type of record "check out" program and I'm just
a wee bit confused.
Several users will be using the same select
statement at the same time and just want to make sure they're getting
different records. example.......

-----------------------------------------------------
user1

begin;

select account from customer where customer is not null and chkout
is null order by account for update limit 1;

"account 123"

update customer set chkout = 'x' where account = 123;

update 1

end;
-----------------------------------------------------
user2

begin;

select account from customer where customer is not null and chkout
is null order by account for update limit 1;

(waits for commit from user1 to release row lock)
(user1 commits)

"account ( 0 rows)"

end;
-----------------------------------------------------

I thought the cursor would wait for the commit from user1 and once
user1 commited it would re-evaluate the query starting at that row
and continue if it doesn't meet the select where clause.

Ok, I see I can remove the "limit 1" and let the cursor return
"all rows" (thousands, or maybe "limit 50"), just thought it would be
more efficent using the "limit 1"

errr, am I missing something, should one just return all rows/limit 50
or should I just be going about this another way?

Any thoughts would be great.

TIA
Ken



pgsql-general by date:

Previous
From: Bruno Wolff III
Date:
Subject: Re: Simple list tables question
Next
From: Pierre Didelon
Date:
Subject: Re: unsigned types, binary op. and cast pb