Проверяет понимание безопасного деплоя схемы БД, когда изменения должны быть совместимы со старым и новым кодом одновременно.
Когда новая функциональность включается через feature flag, схема базы данных должна поддерживать оба состояния одновременно: и старое поведение, и новое. Если миграция сразу удалит колонку или переименует поле, старый код, который ещё работает у части пользователей, упадёт. Поэтому миграции выпускают по принципу expand and contract: сначала расширяем схему, потом переносим данные и код, и только затем сжимаем.
-- Шаг 1: expand, добавляем новую колонку
ALTER TABLE users ADD COLUMN full_name TEXT;
-- Шаг 2: backfill данных
UPDATE users SET full_name = first_name || ' ' || last_name
WHERE full_name IS NULL;
-- Шаг 3: после раската флага удаляем старые колонки
ALTER TABLE users DROP COLUMN first_name;
ALTER TABLE users DROP COLUMN last_name;Такой подход позволяет деплоить миграции и код независимо, откатывать функциональность без отката схемы и избегать простоя. Он особенно полезен в командах с непрерывным деплоем и большим количеством пользователей.