Цель: ввести дисциплину миграций без простоя, чтобы выкатка схемы не ломала работающие инстансы старого кода во время деплоя.
Зависимость: —
Что сделать
- Продемонстрировать паттерн expand/contract на реальной новой колонке (например,
items.barcode или stock_movements.reason):
Vx__add_col_nullable.sql — добавить колонку nullable, без NOT NULL/дефолта, переписывающего таблицу.
- Backfill существующих строк (отдельная миграция или джоба, батчами).
Vy__set_col_not_null.sql — навесить NOT NULL/индекс отдельной миграцией, когда весь код уже пишет колонку.
- Зафиксировать в
docs/ правила: запрет переименований/удалений/сужений типа в одном шаге, запрет блокирующих ALTER на больших таблицах.
- Стретч: объяснить совместимость — старый и новый код одновременно работают на промежуточной схеме; показать, почему шаг 1 безопасен при rolling-деплое.
Acceptance criteria
Цель: ввести дисциплину миграций без простоя, чтобы выкатка схемы не ломала работающие инстансы старого кода во время деплоя.
Зависимость: —
Что сделать
items.barcodeилиstock_movements.reason):Vx__add_col_nullable.sql— добавить колонку nullable, безNOT NULL/дефолта, переписывающего таблицу.Vy__set_col_not_null.sql— навеситьNOT NULL/индекс отдельной миграцией, когда весь код уже пишет колонку.docs/правила: запрет переименований/удалений/сужений типа в одном шаге, запрет блокирующихALTERна больших таблицах.Acceptance criteria
docs/есть чеклист «что нельзя в одной миграции» с обоснованием.flyway validate, повторный старт не перезапускает их.