89 lines
3.3 KiB
Markdown
89 lines
3.3 KiB
Markdown
# Решение проблемы с миграциями базы данных
|
||
|
||
## Проблемы
|
||
|
||
При попытке применить миграции были обнаружены следующие проблемы:
|
||
|
||
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
|
||
```
|