102 lines
4.2 KiB
Bash
102 lines
4.2 KiB
Bash
#!/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-миграций завершен!"
|