Как спроектировать стратегию zero-downtime-миграции при удалении колонки из таблицы БД со 100 млн строк без остановки записи?

Удаляйте колонку этапами: сначала прекратите её использование во всех версиях приложения, затем проверьте зависимости и только потом выполняйте DROP COLUMN с ограничением ожидания блокировки.

Короткий ответ

Что ответить на собеседовании

Удаляйте колонку этапами: сначала прекратите её использование во всех версиях приложения, затем проверьте зависимости и только потом выполняйте DROP COLUMN с ограничением ожидания блокировки.

Подробный разбор

Ответ с пояснениями

Удаляйте колонку этапами: сначала прекратите её использование во всех версиях приложения, затем проверьте зависимости и только потом выполняйте DROP COLUMN с ограничением ожидания блокировки.

Проверьте фоновые задания, отчёты, views, индексы и старые экземпляры. Отдельно убедитесь, что inserts не полагаются на позиционный список всех столбцов. В PostgreSQL логическое удаление колонки обычно не переписывает сразу всю таблицу, но требует сильной блокировки; задайте короткий lock_timeout и повторяйте в безопасное окно. Физическое освобождение места — отдельная операция, потенциально дорогая. Не обещайте буквально нулевую паузу: цель — контролируемое воздействие и совместимость. После удаления rollback старого кода уже может быть невозможен.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее