Re: Am I locking more than I need to? - Mailing list pgsql-general

From Jeff Davis
Subject Re: Am I locking more than I need to?
Date
Msg-id 1085178241.2274.994.camel@jeff
Whole thread Raw
In response to Re: Am I locking more than I need to?  ("Carl E. McMillin" <carlymac@earthlink.net>)
Responses Re: Am I locking more than I need to?  ("Carl E. McMillin" <carlymac@earthlink.net>)
Re: Am I locking more than I need to?  (Mike Rylander <miker@purplefrog.com>)
List pgsql-general
On Fri, 2004-05-21 at 14:33, Carl E. McMillin wrote:
> Scenario:
>
> SELECT ... WHERE cart_id=X FOR UPDATE
>
> IF (NOT FOUND) THEN
>   BEGIN
> --Here is where nothing is locked.
> --No way to guarantee no one else will create a record before we do.
>   INSERT ...
>   END;
> END IF;
>

Instead, I was thinking more like:

BEGIN
SELECT ... WHERE cart_id=X FOR UPDATE
IF (NOT FOUND) THEN
--Here is where nothing is locked.
--No way to guarantee no one else will create a record before we do.
  INSERT ...
ELSE
  UPDATE ...
END IF;
END;

Won't that "SELECT ... FOR UPDATE" block out a concurrent access to the
same cart until the first one finishes? Of course this assumes all
concurrent accesses also try to "SELECT ... FOR UPDATE" before
inserting.

Thanks,
Jeff Davis




pgsql-general by date:

Previous
From: Tom Lane
Date:
Subject: Re: extreme memory use when loading in a lot of data
Next
From: "Carl E. McMillin"
Date:
Subject: Re: Am I locking more than I need to?