Re: Am I locking more than I need to?

From: Jeff Davis <jdavis-pgsql(at)empires(dot)org>
To: "Carl E(dot) McMillin" <carlymac(at)earthlink(dot)net>
Cc: 'PostgreSQL General' <pgsql-general(at)postgresql(dot)org>
Subject: Re: Am I locking more than I need to?
Date: 2004-05-21 22:24:01
Message-ID: 1085178241.2274.994.camel@jeff
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Carl E. McMillin 2004-05-21 23:17:06 Re: Am I locking more than I need to?
Previous Message Tom Lane 2004-05-21 22:15:15 Re: extreme memory use when loading in a lot of data