#!/bin/bash # run_sql_migrations.sh - Ручное применение SQL-миграций echo "🚀 Запуск SQL-миграций..." # Загрузка переменных окружения из .env if [ -f .env ]; then echo "📝 Загрузка переменных окружения из .env..." set -o allexport source .env set +o allexport else echo "⚠️ Файл .env не найден, используем значения по умолчанию" export DB_HOST="localhost" export DB_PORT="5432" export DB_NAME="telegram_tinder_bot" export DB_USERNAME="postgres" export DB_PASSWORD="postgres" fi # Вывод информации о подключении echo "🔍 Используемые параметры подключения:" echo "DB_HOST: $DB_HOST" echo "DB_PORT: $DB_PORT" echo "DB_NAME: $DB_NAME" echo "DB_USERNAME: $DB_USERNAME" echo "DB_PASSWORD: ********" # Функция для применения SQL файлов из директории apply_sql_files() { local directory=$1 echo "🔍 Ищем SQL-файлы в директории $directory..." if [ -d "$directory" ]; then # Получаем список файлов в порядке времени создания files=$(find "$directory" -name "*.sql" | sort) if [ -z "$files" ]; then echo "⚠️ SQL-файлы не найдены в $directory" return 0 fi for sql_file in $files; do echo "🔄 Применение миграции $sql_file..." # Проверяем, есть ли уже запись о миграции в таблице migrations filename=$(basename "$sql_file") exists=$(PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -p $DB_PORT -U $DB_USERNAME -d $DB_NAME -t -c "SELECT EXISTS(SELECT 1 FROM migrations WHERE name='$filename')" 2>/dev/null) # Если таблицы migrations не существует, создаем её if [ $? -ne 0 ]; then echo "📝 Таблица migrations не найдена. Создаем..." PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -p $DB_PORT -U $DB_USERNAME -d $DB_NAME -c " CREATE TABLE IF NOT EXISTS migrations ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) " 2>/dev/null exists=" f" fi # Если миграция уже применена, пропускаем if [[ "$exists" == *"t"* ]]; then echo "⏭️ Миграция $filename уже применена, пропускаем" continue fi # Применяем миграцию PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -p $DB_PORT -U $DB_USERNAME -d $DB_NAME -f "$sql_file" if [ $? -eq 0 ]; then echo "✅ Миграция $filename успешно применена" # Записываем в таблицу migrations PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -p $DB_PORT -U $DB_USERNAME -d $DB_NAME -c " INSERT INTO migrations (name) VALUES ('$filename') " 2>/dev/null else echo "❌ Ошибка при применении миграции $filename" return 1 fi done else echo "⚠️ Директория $directory не найдена" return 0 fi return 0 } # Применяем SQL миграции из всех возможных папок echo "🔄 Применение SQL-миграций из src/database/migrations..." apply_sql_files "src/database/migrations" echo "🔄 Применение SQL-миграций из migrations/sql..." apply_sql_files "migrations/sql" echo "🔄 Применение SQL-миграций из migrations (если есть)..." apply_sql_files "migrations" echo "✅ Процесс применения SQL-миграций завершен!"