Коротка відповідь
juniorМіграції виконуються через інструменти ORM, наприклад Prisma або TypeORM: створюється файл‑міграція з DDL, підписується і застосовується командою `prisma migrate deploy` або `typeorm migration:run`. Після виконання транзакційно, зміни застосовуються без перерви у доступі до даних.
Повне пояснення
Що це і навіщо
Міграція – процес оновлення схеми бази даних у продакшені, що дозволяє додавати/видаляти таблиці, колонки та індекси без втрати даних.
Ключові принципи
- Транзакційність: більшість СУБД підтримують DDL‑операції в транзакціях, що гарантує атомарність.
- Версійний контроль: кожна міграція має унікальний ідентифікатор, що дозволяє відстежувати стан схеми.
- Rollback: можливість повернутися до попередньої версії за допомогою
down‑скрипту.
Як це працює
- Створення міграції – ORM генерує SQL‑скрипт, що описує зміни.
- Застосування – команда
migrate deployзапускає скрипт у транзакції, оновлюючи схему. - Підтримка – після застосування оновлюється таблиця
schema_migrations(або аналогічна), що зберігає історію.
Практика й реалізація
- Prisma:
prisma migrate dev --create-only→prisma migrate deploy. - TypeORM:
typeorm migration:create -n AddUserEmail→typeorm migration:run. - SQL‑скрипти: у випадку ручного застосування –
ALTER TABLE users ADD COLUMN email VARCHAR(255); CREATE INDEX idx_users_email ON users(email);.
Тестування
- Unit: перевірка, що міграція не руйнує існуючі дані.
- Integration: запуск
prisma migrate deployу тестовому середовищі, перевірка доступності таблиць.
Оптимізація запитів
- Після додавання індексу слід виконати
ANALYZEдля оновлення статистики. - Перевірити план виконання (
EXPLAIN) перед релізом.
Безпека
- Використовувати ролі з мінімальними правами: лише роль
db_migratorмає право виконувати DDL. - Підписувати скрипти під час CI/CD, щоб запобігти несанкціонованим змінам.
Особливості в контексті ORM
- Prisma: підтримує
shadow databaseдля тестування міграцій. - TypeORM: автоматичний
synchronizeвимикається в продакшені, щоб уникнути небажаних змін.
Типові помилки
- Невірний порядок – спроба створити індекс на колонку, що ще не існує.
- Відсутність транзакції – часткові зміни після падіння.
- Неправильний тип даних – змінює тип колонки, що порушує існуючі запити.
- Відсутність
down– неможливість повернутися. - Проблеми з блокуванням – довготривалі DDL‑операції блокують інші транзакції.
- Неправильні права – роль без
ALTERне може застосувати міграцію. - Несумісність версій – використання старої схеми в новому коді.
- Відсутність резервної копії – ризик втрати даних.
Cheatsheet
prisma migrate deploy– застосувати всі незастосовані міграції.typeorm migration:run– застосувати всі незастосовані міграції.ALTER TABLE … ADD COLUMN– додати колонку.CREATE INDEX … ON …– створити індекс.
Follow‑up питання
- Як перевірити, що міграція не вплине на продуктивність?
- Які стратегії rollback використовуються при помилці?
- Як забезпечити безперервність доступу під час великих DDL‑операцій?