Re: Counterintuitive locking behavior

From: Amit kapila <amit(dot)kapila(at)huawei(dot)com>
To: Chris Travers <chris(dot)travers(at)gmail(dot)com>, Postgres General <pgsql-general(at)postgresql(dot)org>
Subject: Re: Counterintuitive locking behavior
Date: 2013-01-06 06:53:10
Message-ID: 6C0B27F7206C9E4CA54AE035729E9C383BEA732A@szxeml509-mbx
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general


On Sunday, January 06, 2013 11:10 AM Amit kapila wrote:
On Sunday, January 06, 2013 7:48 AM Chris Travers wrote:

>> Is there a reason why we don't do locking this way? (i.e. where on UPDATE foo, all rows selected from foo during the
>> update are locked unless the subselect specifically states otherwise.)

>The reason for this behavior is if it locks all rows during select, then it can so happen that Update will actually not happen on the row but it will be locked.
> For example

> UPDATE foo SET test = 3 WHERE test in (select test from foo where test = 1) and FALSE;

> Now in this case if it locks the rows during subselect, then the rows will be locked during whole transaction
> irrespective of the fact that they will not be updated.

In the above example and FALSE, I mean to say any other subquery which will yield the overall condition to not return any row.
Similarly there can be many more scenarios where only half of the selected rows (by one of the conds. ) will be actual candidates of Update.

With Regards,
Amit Kapila.

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Boszormenyi Zoltan 2013-01-06 07:11:31 Re: Counterintuitive locking behavior
Previous Message Amit kapila 2013-01-06 05:40:32 Re: Counterintuitive locking behavior