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

Поиск
Список
Период
Сортировка
От Alexey Bashtanov
Тема Re: Re: Re[2]: [pgsql-ru-general] Неблокирующий запрос
Дата
Msg-id 55F01B99.3070404@imap.cc
обсуждение исходный текст
Ответ на Re: [pgsql-ru-general] Неблокирующий запрос  (Andrey Lizenko <lizenko79@gmail.com>)
Ответы Re: Re: Re: Re[2]: [pgsql-ru-general] Неблокирующий запрос
Список pgsql-ru-general
Что понимается под чистым SQL?
Можно ли, например, пользоваться командами psql, начинающимися с backslash?
Если да, то цикл, необходимый для п.3, можно написать с помощью SQL
interpolation и инклюда файлов.
Если нет, то скорее всего ничего не получится: коммит транзакции
невозможно сделать из функции, поэтому каждый коммит придётся писать в
файл непосредственно.

Чтобы решить, как разбивать таблицу на пачки для апдейта, надо знать её
схему, индексы, и какая активность на ней происходит.

Алексей Баштанов

On 09.09.2015 11:42, Dmitry E. Oboukhov wrote:
> Алгоритм то итак был понятен
> 1. добавляем null поле (бесплатно)
> 2. строим concurently индекс по этому полю
> 3. заполняем неторопясь это поле
> 4. далее в транзакции дозаполняем остаток,
>     добавляем not null на это поле (помогает индекс),
>     переименовываем столбики
>
> вопрос можно ли это проделать на чистом SQL
>
>> Пересоздать таблицу: 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@gmail.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 <: <http://
>> www.databasesoup.com/2015/08/lock-polling-script-for-alter-table.html"
>> target="_blank" >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@debian.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@debian.org jabber://UNera@uvw.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



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

Предыдущее
От: "Dmitry E. Oboukhov"
Дата:
Сообщение: Re: Re[2]: [pgsql-ru-general] Неблокирующий запрос
Следующее
От: "Dmitry E. Oboukhov"
Дата:
Сообщение: Re: Re: Re: Re[2]: [pgsql-ru-general] Неблокирующий запрос