migrations fix

This commit is contained in:
2025-09-18 16:52:03 +09:00
parent fdd0580554
commit e907dffe8c
5 changed files with 294 additions and 2 deletions

101
bin/run_sql_migrations.sh Normal file
View File

@@ -0,0 +1,101 @@
#!/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-миграций завершен!"