Re: Postgres unique index checking and atomic transactions

Поиск
Список
Период
Сортировка
От Dmitry Tkach
Тема Re: Postgres unique index checking and atomic transactions
Дата
Msg-id 3F2010BA.3070109@openratings.com
обсуждение исходный текст
Ответ на Postgres unique index checking and atomic transactions  (Greg Stark <gsstark@mit.edu>)
Ответы Re: Postgres unique index checking and atomic transactions  (Greg Stark <gsstark@mit.edu>)
Список pgsql-general
Greg Stark wrote:

>So I have to adjust a primary key by adding one to every existing record.
>Obviously this isn't a routine operation, my data model isn't that messed up.
>It's a one-time manual operation.
>
>However when I tried to do the equivalent of:
>
>  update tab set pk = pk + 1
>
>I got
>
>  ERROR:  Cannot insert a duplicate key into unique index tab_pkey
>
>Is that right? Obviously after completing the query there would be no
>duplicate keys. Is this a case where I would need deferred constraints to
>allow this? Even for immediate constraints shouldn't a single sql update be
>able to go ahead as long as it leaves things in a consistent state?
>
>
>
I tend to agree with you, that that's how it should be... I don't know
what the standards have to say about it though.
You cannot have unique constraints deferred either - only FKs, because
the uniqueness is checked right when you attempt to insert the key into
the index, and that cannot wait till the end of transaction, because
then your current transaction would not be able to use that index (it
would be nice to be able to postpone the insertin till the end of the
statement though - for performance reasons - but that's not the way it
works) :-(

The good news though is that, if you drop (or disable) your pk index
before the update, and recreate (reindex) afterwards, your update
statement should actually perform better ...

Dima


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

Предыдущее
От: Mike Mascari
Дата:
Сообщение: Re: Postgres unique index checking and atomic transactions
Следующее
От: Greg Stark
Дата:
Сообщение: Re: Postgres unique index checking and atomic transactions