Re: How to use read uncommitted transaction level and set update order

Поиск
Список
Период
Сортировка
От Scott Marlowe
Тема Re: How to use read uncommitted transaction level and set update order
Дата
Msg-id dcc563d10912200124w16279107p43ad5f10f3f7c48f@mail.gmail.com
обсуждение исходный текст
Ответ на Re: How to use read uncommitted transaction level and set update order  ("Andrus" <kobruleht2@hot.ee>)
Список pgsql-general
On Sun, Dec 20, 2009 at 2:12 AM, Andrus <kobruleht2@hot.ee> wrote:
>> You cannot access new values of a  particular row within a single UPDATE
>> statement, but you do see new  values done in the same transaction.
>> This is explain in some detail in the documentation:
>>
>>
>> http://www.postgresql.org/docs/8.4/interactive/transaction-iso.html#XACT-READ-COMMITTED
>
> I tried
>
> drop table if exists tt ;
> create temp table tt ( a int, b int );
> insert into tt values ( 1,2);
> insert into tt values ( 3,4);
> update tt set a=a*10, b=(select sum(a) from tt);
> select * from tt
>
> b has value 4 for every row.
>
> So we *dont* see new  values done in the same transaction.
> How to fix ?

This isn't broken behaviour.

First the inserts run and we have

1,2
3,4

When the update fires, the right hand side of the key/value pairs are
evaluated simultaneously based on the data in the table AT THE TIME
The query starts.  b=sum(a) means b=sum(3,1) which means you're
setting b=4...  This was explained in a previous post by Tom I
believe.  Unless I'm missing what you're saying.

В списке pgsql-general по дате отправления:

Предыдущее
От: "Andrus"
Дата:
Сообщение: Re: How to use read uncommitted transaction level and set update order
Следующее
От: "JGuillaume (ioguix) de Rorthais"
Дата:
Сообщение: Re: Extracting SQL from logs in a usable format