Сначала выясните причину остановки миграции: блокировка, timeout, переписывание таблицы или ошибка SQL. Разделите добавление колонки, совместимую запись новых данных и пакетное заполнение старых строк.
Как бы вы провели миграцию на таблице с 20–80 млн строк: добавить новую колонку и предзаполнить её значением на основе другого поля, если миграция не применяется?
Сначала выясните причину остановки миграции: блокировка, timeout, переписывание таблицы или ошибка SQL. Разделите добавление колонки, совместимую запись новых данных и пакетное заполнение старых строк.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Сначала выясните причину остановки миграции: блокировка, timeout, переписывание таблицы или ошибка SQL. Разделите добавление колонки, совместимую запись новых данных и пакетное заполнение старых строк.
Добавьте колонку без тяжёлого вычисления для всех строк, затем обновляйте ограниченные диапазоны с короткими транзакциями и контрольной точкой прогресса. Вычисление из другого поля требует backfill, а не обычного DEFAULT со ссылкой на соседнюю колонку. Согласуйте конкурентные изменения исходного поля, следите за WAL, лагом реплик и блокировками. Ограничения и индексы вводите отдельными проверенными шагами. Не обходите проблему простым снятием всех timeout.
Источник: www.postgresql.org.