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
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 |