Re: Atomicity of UPDATE, interchanging values in unique column

Поиск
Список
Период
Сортировка
От Rod Taylor
Тема Re: Atomicity of UPDATE, interchanging values in unique column
Дата
Msg-id 1047159202.28251.196.camel@jester
обсуждение исходный текст
Ответ на Atomicity of UPDATE, interchanging values in unique column  (daniel alvarez <d-alvarez@gmx.de>)
Список pgsql-sql
> UPDATE sometable SET unique_col =
>    CASE WHEN unique_col = firstvalue THEN secondvalue
>             ELSE  firstvalue
>    END
> WHERE unique_col = firstvalue
>       OR unique_col = secondvalue

(See last comment)

> BEGIN;
> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
>
> UPDATE sometable SET unique_col = firstvalue WHERE unique_col = secondvalue;
> UPDATE sometable SET unique_col = secondvalue WHERE unique_col = firstvalue;
>
> COMMIT;

This one will always fail unless you DEFER unique constraints --
something we don't support with PostgreSQL, but some others do.

> How can I interchange two values in a unique column? Am I missing something
> really
> obvious (like a swap statement)? Is there any reason besides performance for
> not
> making index accesses fully ACID-compliant? Doesn't MVCC require this
> anyway?

The first is what you want.  PostgreSQL needs some work in the
evaluation of unique indexes to properly support it.

Namely, when it sees a conflict when inserting into the index, it needs
to record the fact, and revisit the conflict at the end of the command.
Lots of work...

--
Rod Taylor <rbt@rbt.ca>

PGP Key: http://www.rbt.ca/rbtpub.asc

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

Предыдущее
От: daniel alvarez
Дата:
Сообщение: Atomicity of UPDATE, interchanging values in unique column
Следующее
От: daniel alvarez
Дата:
Сообщение: Re: Atomicity of UPDATE, interchanging values in unique column