Миграции: безопасное изменение схемы
Ваша схема будет меняться — вы добавите столбец, переименуете таблицу, добавите индекс. Миграция — это версионированный, повторяемый скрипт, который описывает одно такое изменение. Миграции важны потому, что схема на вашем ноутбуке, на ноутбуке вашего коллеги и в продакшене должна оставаться идентичной.
Правила, которые делают миграции безопасными:
- Никогда не редактируйте базу данных вручную в продакшене. Напишите миграцию.
- Миграции движутся вперёд. Каждая из них — новый файл; вы не переписываете старые, которые уже выполнились.
- Деструктивные изменения делайте осторожно. Удаление столбца или таблицы стирает данные навсегда. Сначала сделайте резервную копию.
- Аддитивные изменения самые безопасные. Добавление столбца, допускающего null, редко что-либо ломает; переименование или удаление может сломать работающий код.
Инструменты вроде Prisma, Drizzle или миграций Rails генерируют и отслеживают их за вас. Доверьте это им.
Миграция состоит из двух половин: изменение для применения (up) и как его отменить (down). Надёжный инструмент генерирует оба, так что плохой деплой можно откатить начисто:
-- up: добавить необязательное bio, безопасно применять вживую
ALTER TABLE users ADD COLUMN bio TEXT;
-- down: обратить изменение
ALTER TABLE users DROP COLUMN bio;
По-настоящему опасные миграции — это переименования и смены типа, потому что старый код и новая схема на мгновение расходятся. Профессиональный паттерн — разбить их на аддитивные шаги: добавить новый столбец, заполнить его, переключить код на чтение из него и удалить старый столбец только в более позднем деплое, когда на него уже ничто не ссылается. Это кажется медленным, но это разница между плавным релизом и всплеском ошибок 500 для каждого пользователя посреди деплоя.