Перейти к содержимому
11 / 15

Как выкатывать миграции базы данных, чтобы можно было откатиться?

Во время любого выката без простоя старая и новая версии кода работают одновременно, поэтому схема базы должна быть совместима с обеими. Отсюда подход expand/contract: сначала только добавляем (новая колонка, допускающая NULL, новая таблица, двойная запись), затем переключаем чтение на новое, и лишь спустя релиз-другой удаляем старое. Разрушающие изменения (удаление или переименование колонки, сужение типа, NOT NULL без значения по умолчанию) никогда не выпускают вместе с кодом, который их использует, — иначе откат кода становится невозможным. Долгие операции над большими таблицами делают неблокирующими, а миграции запускают отдельным шагом конвейера, а не при старте приложения.

Как выкатывать миграции базы данных, чтобы можно было откатиться? | JScriptiser