3.3 KiB
3.3 KiB
Решение проблемы с миграциями базы данных
Проблемы
При попытке применить миграции были обнаружены следующие проблемы:
- Ошибка с TypeScript файлами: Node.js не может напрямую выполнять файлы
.tsбез компиляции их в JavaScript. - Предупреждения о ES модулях: Файлы используют синтаксис ES модулей, но не имеют расширения
.mjsили настроек в package.json. - Неверный порядок миграций: Миграции могут выполняться в неправильном порядке.
Решения
Для быстрого применения миграций
Используйте один из следующих сценариев:
# Полный процесс миграции с компиляцией TypeScript
./bin/run_full_migration.sh
# Только SQL-миграции (минуя node-pg-migrate)
./bin/run_sql_migrations.sh
Пошаговое решение
-
Компиляция TypeScript миграций в JavaScript:
./bin/compile_ts_migrations.sh -
Применение JS-миграций:
./bin/apply_migrations.sh -
Ручное применение SQL-миграций:
./bin/run_sql_migrations.sh
Описание скриптов
- run_full_migration.sh: Полный процесс миграции, включающий компиляцию TypeScript и применение всех миграций.
- compile_ts_migrations.sh: Только компиляция TypeScript миграций в JavaScript.
- apply_migrations.sh: Применение JS-миграций через node-pg-migrate.
- run_sql_migrations.sh: Прямое применение SQL-миграций через psql.
Проверка результатов
После выполнения миграций проверьте состояние базы данных:
# Подключение к базе данных
PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -p $DB_PORT -U $DB_USERNAME -d $DB_NAME
# Проверка таблиц
\dt
# Проверка примененных миграций
SELECT * FROM migrations ORDER BY executed_at;
Если проблемы сохраняются
-
Очистить директорию миграций:
# Создание резервной копии mkdir -p backup_migrations cp -r migrations/* backup_migrations/ # Оставить только JS-миграции rm -f migrations/*.ts -
Инициализировать миграции заново:
npx node-pg-migrate init -
Применить специальную консолидированную миграцию:
# Создание консолидированной миграции cat src/database/migrations/*.sql > consolidated.sql # Применение консолидированной миграции PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -p $DB_PORT -U $DB_USERNAME -d $DB_NAME -f consolidated.sql