Re[2]: [pgsql-ru-general] Неблокирующий запрос

From: Миша Тюрин <tmihail(at)bk(dot)ru>
To: Andrey Lizenko <lizenko79(at)gmail(dot)com>
Cc: Dmitry E(dot) Oboukhov <unera(at)debian(dot)org>, pgsql-ru-general <pgsql-ru-general(at)postgresql(dot)org>
Subject: Re[2]: [pgsql-ru-general] Неблокирующий запрос
Date: 2015-09-08 21:28:04
Message-ID: 1441747684.907888722@f389.i.mail.ru
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general


Пересоздать таблицу: select все_поля_с_подменой_енума_на_текст into tbl_new from tbl; rename tbl to tbl_old; rename tbl_new to tbl; потом можно и дропнуть tbl_old. Ну это с даунтаймом.
Иначе все сложнее. Можно временно совмещать на вьюшке два поля в одно, пока в фоне идёт апдейт. Потом вьюшку убрать. При этом новое все сразу вставлять/апдейтить по новой схеме. После внедрения новой схемы до убирания вьюшки все разом вычитать и потом через очередь апдейтить пачками. Ну и тут тоже с локами надо костылить по типу как ссылка из блога.
--
Отправлено из Mail.Ru для Android вторник, 08 сентября 2015г., 15:46 +03:00 от Andrey Lizenko < lizenko79(at)gmail(dot)com> :

>Может быть, как-нибудь вот так?
>
>http://www.databasesoup.com/2015/08/lock-polling-script-for-alter-table.html
>
>2015-09-08 14:07 GMT+03:00 Dmitry E. Oboukhov < unera(at)debian(dot)org > :
>>есть огромная таблица на неск. десятков млн строк
>>
>>в ней есть поле  ENUM.
>>
>>хотим преобразовать его в TEXT.
>>
>>Можно ли это сделать на чистом SQL?
>>
>>то есть ALTER TABLE .. ADD COLUMN col TEXT;
>>
>>не будет блокироваться,
>>далее надо его заполнить значением из ENUM и после этого можно будет
>>сделать rename.
>>
>>проблема в том что имеется действующая инфраструктура
>>апгрейда-даунгрейда БД и она предполагает только up.sql, down.sql.
>>
>>соответственно можно написать сколько угодно инструкций но на SQL а не
>>на другом Я.П.
>>
>>можно ли извратнуться как-то и сделать аналог
>>
>>UPDATE
>>    table
>>SET
>>    col1 = col2
>>WHERE
>>    col1 IS NULL
>>
>>неубивающим БД?
>>
>>пока в голову пришло только сгенерить этот самый SQL чтобы по 1000
>>записей сделал явно больше UPDATE'ов чем есть в БД записей и далее
>>уже в транзакции доделал те что еще остаются недоделанными и
>>переименовал бы столбики.
>>--
>>
>>. ''`.                               Dmitry E. Oboukhov
>>: :’  :   email: unera(at)debian(dot)org jabber:// UNera(at)uvw(dot)ru
>>`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
>>  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537
>>
>>-----BEGIN PGP SIGNATURE-----
>>Version: GnuPG v1.4.10 (GNU/Linux)
>>
>>iEYEAREDAAYFAlXuwW0ACgkQq4wAz/jiZTdO3QCgyj5UOlnMbTkaRGv3q9bLbdml
>>kfgAn29M2yTnhQ+157VkCXdTjuwo4q/X
>>=Mk2J
>>-----END PGP SIGNATURE-----
>>
>
>
>
>--
>Regards, Andrey Lizenko

In response to

Responses

Browse pgsql-ru-general by date

  From Date Subject
Next Message Dmitry E. Oboukhov 2015-09-09 07:49:26 Re: Re: [pgsql-ru-general] Неблокирующий запрос
Previous Message Andrey Lizenko 2015-09-08 12:46:10 Re: [pgsql-ru-general] Неблокирующий запрос