Simulating a SELECT..FOR UPDATE to LOCK and SELECT statement

From: Ludwig Lim <lud_nowhere_man(at)yahoo(dot)com>
To: PostgreSQL Mailing List <pgsql-sql(at)postgresql(dot)org>
Subject: Simulating a SELECT..FOR UPDATE to LOCK and SELECT statement
Date: 2002-10-24 04:10:32
Message-ID: 20021024041032.93394.qmail@web80313.mail.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-hackers pgsql-sql

Hi:

Is there a way to emulate a SELECT..FOR UPDATE to
series of LOCK/SELECT statement.

I tried the following statements using 2 psql
terminals.

T1 | T2
1) BEGIN; |
2) SELECT x | BEGIN;
FROM y |
WHERE y=1 |
FOR UPDATE; |
3) | SELECT x
| FROM y
| WHERE y=1
| FOR UPDATE;
4) COMMIT; |
5) | COMMIT;

At point #3 T2 will wait, however changing the WHERE
clause to other clause such as "WHERE y=2" will allow
T2 to proceed.

- I tried changing the SELECT..FOR UPDATE into LOCK
SHARE MODE followed by a SELECT (but w/o FOR UPDATE)
but it T2 is allowed to proceed even for the clause
"where y=1".

I am surprised because according to the docs
(version 7.2), it says:
ROW SHARE MODE
Note: Automatically acquired by SELECT ... FOR
UPDATE.
I'm assuming that the SELECT..FOR UPDATE performs
a lock in ROW SHARE MODE before the SELECT.

I also tried changing the lock mode into SHARE ROW
EXCLUSIVE MODE / EXCLUSIVE MODE but still T2 won't be
allowed to passed even the for the clause "where y=2".

Is there any to do it? I'm asking becuase our db
libaries (using libpq) always a cursor when generating
a SELECT statement thus I'm encourtering the following
error message when I use SELECT..FOR UPDATE:
Cursor must be READ ONLY.
DECLARE/UPDATE is not supported.

Another alternative would be studying libpq and
removing the cursors in a SELECT statement.

By the way is there any side effect / disadavtages
when I remove the "DELCARE CURSOR" statement and
change it to plain SELECT statememt in C++ codes?

Thank you in advance,

ludwig.

__________________________________________________
Do you Yahoo!?
New DSL Internet Access from SBC & Yahoo!
http://sbc.yahoo.com

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Leif Jensen 2002-10-24 04:40:37 Re: Linking 2 or more databases.
Previous Message Tom Lane 2002-10-24 02:20:55 Re: ownership of sequences

Browse pgsql-hackers by date

  From Date Subject
Next Message Marc G. Fournier 2002-10-24 04:18:04 Re: One 7.3 item left
Previous Message Tom Lane 2002-10-24 03:17:03 Re: One 7.3 item left

Browse pgsql-sql by date

  From Date Subject
Next Message peter 2002-10-24 06:42:52 Re: Multiple Databases
Previous Message Tom Lane 2002-10-24 03:28:01 Re: sub-select trouble: wrong SQL or PostgreSQL issue?