Переименование колонки без простоя
Вопрос
Нужно переименовать колонку name в full_name в нагруженной таблице при rolling deploy. Какой порядок безопасен?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Одной миграцией
RenameFieldв том же релизе, что и код - Добавить
full_name, писать в обе, перенести, переключить чтение, удалитьnameправильный ответ - Удалить
nameи добавитьfull_nameодной миграцией в одной транзакции - Остановить сайт, переименовать колонку и запустить новую версию кода
Разбор
При rolling deploy старые экземпляры приложения какое-то время работают с новой схемой. После мгновенного переименования они начнут падать на обращении к name. Схема expand/contract делает каждое изменение совместимым с текущим и предыдущим кодом. Удаление с добавлением теряет данные, а остановка сайта это как раз простой, которого мы избегаем.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Порядок шагов переименования колонки без простоя
Следующий вопрос
Код-ревью миграции данных Django