🛠 Как не положить продакшн при миграциях БД
Сохраняйте базовые правила, которые уберегут от 500-х ошибок:
1. Добавление новой колонки с Default-значением
❌ ALTER TABLE orders ADD COLUMN status VARCHAR DEFAULT 'pending';
на большой таблице это заблокирует её на чтение/запись, пока СУБД будет физически перезаписывать каждую строку.
✅Добавить колонку без default, накатить код, который умеет обрабатывать NULL как значение по умолчанию, и заполнять старые строки фоновым батч-процессом.
2. Переименование колонки
❌ Просто переименовать поле в БД и надеяться на быстрый деплой нового кода.
✅ Создать новую колонку рядом.
Настроить триггер, который пишет данные в обе колонки одновременно. Начать миграцию старых данных.
Перевести чтение на новую колонку, после чего старую можно безопасно удалить.
3. Удаление колонки
❌ Удалить из БД, а потом выкатить код.
✅ Сначала выкатить версию кода, которая вообще не обращается к этой колонке. Убедиться, что всё стабильно, и только потом делать DROP COLUMN.