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