Выбор ответа Senior Миграции спрашивают часто обновлено

Переименование колонки без простоя

Вопрос

Нужно переименовать колонку name в full_name в нагруженной таблице при rolling deploy. Какой порядок безопасен?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Добавить fullname, писать в обе, перенести, переключить чтение, удалить name. При rolling deploy старые экземпляры приложения какое-то время работают с новой схемой.

Варианты ответа

  1. Одной миграцией RenameField в том же релизе, что и код
  2. Добавить full_name, писать в обе, перенести, переключить чтение, удалить nameправильный ответ
  3. Удалить name и добавить full_name одной миграцией в одной транзакции
  4. Остановить сайт, переименовать колонку и запустить новую версию кода

Разбор

При rolling deploy старые экземпляры приложения какое-то время работают с новой схемой. После мгновенного переименования они начнут падать на обращении к name. Схема expand/contract делает каждое изменение совместимым с текущим и предыдущим кодом. Удаление с добавлением теряет данные, а остановка сайта это как раз простой, которого мы избегаем.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.