Руководство по миграциям базы данных
Структура миграций
Миграции хранятся в директории database/migrations/ и нумеруются в порядке выполнения:
001-initial-schema.sql - Основная схема базы данных
002-seed-data.sql - Тестовые данные для разработки
003-... - Последующие миграции
Правила создания миграций
- Нумерация: Каждая миграция должна начинаться с трехзначного номера
- Имена файлов: Используйте описательные имена в snake_case
- Комментарии: Добавляйте комментарии к каждой миграции
- Транзакции: Все изменения должны быть обернуты в BEGIN/COMMIT
- Обратная совместимость: Миграции должны быть обратимыми
Порядок выполнения миграций
Миграции выполняются в порядке их нумерации. Система миграций должна:
- Создать таблицу
migrations для отслеживания выполненных миграций
- Выполнять миграции по порядку
- Записывать выполненные миграции в таблицу
migrations
- Предоставлять возможность отката миграций
Пример структуры таблицы миграций
CREATE TABLE migrations (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
executed_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
Инструменты для управления миграциями
Рекомендуемые инструменты:
- node-pg-migrate - для Node.js приложений
- Flyway - Java-based миграции
- Liquibase - кроссплатформенное решение
- Собственный скрипт - простой bash/Python скрипт
Рекомендации по разработке
- Тестирование: Всегда тестируйте миграции на dev окружении
- Резервное копирование: Делайте бэкап перед выполнением миграций
- Версионирование: Храните миграции в системе контроля версий
- Документация: Описывайте изменения в комментариях
- Обратные миграции: Создавайте скрипты для отката изменений
Безопасность
- Никогда не храните чувствительные данные в миграциях
- Используйте переменные окружения для конфиденциальной информации
- Проверяйте миграции на наличие SQL инъекций
Пример использования с node-pg-migrate
Установите node-pg-migrate:
npm install -g node-pg-migrate
Создайте новую миграцию:
node-pg-migrate create add-new-feature
Выполните миграции:
node-pg-migrate up
Откатите миграции:
node-pg-migrate down
Важные замечания
- Миграции должны быть идемпотентными (можно выполнять multiple times)
- Избегайте DROP операций в миграциях
- Всегда добавляйте соответствующие индексы
- Тестируйте производительность миграций на больших объемах данных