| 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: | Whole Thread | Raw Message | 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 |