Re: Re[2]: [pgsql-ru-general] Неблокирующий запрос
От | Dmitry E. Oboukhov |
---|---|
Тема | Re: Re[2]: [pgsql-ru-general] Неблокирующий запрос |
Дата | |
Msg-id | 20150909084216.GD23119@vdsl.uvw.ru обсуждение исходный текст |
Ответ на | Re[2]: [pgsql-ru-general] Неблокирующий запрос (Миша Тюрин <tmihail@bk.ru>) |
Список | pgsql-ru-general |
Алгоритм то итак был понятен 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 -- . ''`. 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
Вложения
В списке pgsql-ru-general по дате отправления: