Files
tg_tinder_bot/docs/migrations_fix.md
2025-09-18 16:52:03 +09:00

3.3 KiB
Raw Permalink Blame History

Решение проблемы с миграциями базы данных

Проблемы

При попытке применить миграции были обнаружены следующие проблемы:

  1. Ошибка с TypeScript файлами: Node.js не может напрямую выполнять файлы .ts без компиляции их в JavaScript.
  2. Предупреждения о ES модулях: Файлы используют синтаксис ES модулей, но не имеют расширения .mjs или настроек в package.json.
  3. Неверный порядок миграций: Миграции могут выполняться в неправильном порядке.

Решения

Для быстрого применения миграций

Используйте один из следующих сценариев:

# Полный процесс миграции с компиляцией TypeScript
./bin/run_full_migration.sh

# Только SQL-миграции (минуя node-pg-migrate)
./bin/run_sql_migrations.sh

Пошаговое решение

  1. Компиляция TypeScript миграций в JavaScript:

    ./bin/compile_ts_migrations.sh
    
  2. Применение JS-миграций:

    ./bin/apply_migrations.sh
    
  3. Ручное применение 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;

Если проблемы сохраняются

  1. Очистить директорию миграций:

    # Создание резервной копии
    mkdir -p backup_migrations
    cp -r migrations/* backup_migrations/
    
    # Оставить только JS-миграции
    rm -f migrations/*.ts
    
  2. Инициализировать миграции заново:

    npx node-pg-migrate init
    
  3. Применить специальную консолидированную миграцию:

    # Создание консолидированной миграции
    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