Bug #722: SELECT FOR UPDATE bug

Started by PostgreSQL Bugs Listover 23 years ago2 messagesbugs
Jump to latest
#1PostgreSQL Bugs List
pgsql-bugs@postgresql.org

Pablo Avil�s Cisneros (paviles@its.co.cr) reports a bug with a severity of 1
The lower the number the more severe it is.

Short Description
SELECT FOR UPDATE bug

Long Description
Hi, I'm encountered a problem with a select for update sentence with postgresql.

If I use...:
BEGIN TRANSACTION;
SELECT * FROM employees
WHERE status = 'A'
LIMIT 1
FOR UPDATE;
...

The problem, in the previous sentence, is block every record on employees, although we want one record, we want limit 1. The bug it seems the limit 1, because if I dispose the limit 1 line, only the return records are blocked.

If I use:
BEGIN TRANSACTION;
SELECT * FROM employees
WHERE (status = 1) AND (id_employee = 123)
ORDER BY id_employee
FOR UPDATE;
...
it block every record on employees, although we want one record, we want id_employee = 123. The bug it seems the order by line, because if I dispose the order by line, only the return records are blocked.

Do you have an alternative way? Is this a bug? Any suggestion?

I'm using Delphi 6 with dbexpress, and the transaction was make with an TSQLClientDataSet component after an TSQLConnection

Pablo Avil�s Cisneros
Technology, ITS
Software Development Area
Technology, ITS
San Jos�, Costa Rica
email: paviles@its.co.cr

Sample Code

No file was uploaded with this report

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: PostgreSQL Bugs List (#1)
Re: Bug #722: SELECT FOR UPDATE bug

pgsql-bugs@postgresql.org writes:

SELECT * FROM employees
WHERE status = 'A'
LIMIT 1
FOR UPDATE;

The problem, in the previous sentence, is block every record on
employees, although we want one record, we want limit 1.

I do not believe that. Could you give a more complete example of
your problem?

It would also help if you'd state which Postgres version you're using.

regards, tom lane