#!/bin/bash # Применение всех патчей базы данных # Использование: ./bin/apply_all_patches.sh set -e # Остановка при ошибке # Загрузка переменных окружения if [ -f .env ]; then source .env else echo "❌ Файл .env не найден!" exit 1 fi # Проверка обязательных переменных if [ -z "$DB_HOST" ] || [ -z "$DB_PORT" ] || [ -z "$DB_NAME" ] || [ -z "$DB_USERNAME" ] || [ -z "$DB_PASSWORD" ]; then echo "❌ Не все переменные DB_* заданы в .env" exit 1 fi echo "🔧 Применение патчей к базе данных..." echo "📍 Сервер: $DB_HOST:$DB_PORT" echo "📂 База данных: $DB_NAME" echo "" # Функция применения патча apply_patch() { local patch_file=$1 local description=$2 if [ ! -f "$patch_file" ]; then echo "⚠️ Патч $patch_file не найден, пропуск..." return fi echo "📝 Применение: $description" if PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USERNAME" -d "$DB_NAME" -f "$patch_file" > /dev/null 2>&1; then echo "✅ Патч применен: $patch_file" else echo "⚠️ Ошибка при применении: $patch_file (возможно уже применен)" fi echo "" } # Применение патчей в правильном порядке apply_patch "sql/consolidated.sql" "Основная схема БД (16 таблиц)" apply_patch "sql/fix_looking_for_column.sql" "Исправление триггера и колонки looking_for" apply_patch "sql/add_job_and_state_columns.sql" "Добавление колонок job и state" echo "🎉 Все патчи обработаны!" echo "" echo "🔍 Проверка применения патчей..." # Проверка критичных колонок PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USERNAME" -d "$DB_NAME" << 'EOF' SELECT CASE WHEN EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'profiles' AND column_name = 'job') THEN '✅ profiles.job существует' ELSE '❌ profiles.job НЕ НАЙДЕНА' END as status_job, CASE WHEN EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'users' AND column_name = 'state') THEN '✅ users.state существует' ELSE '❌ users.state НЕ НАЙДЕНА' END as status_state, CASE WHEN EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'profiles' AND column_name = 'interested_in') THEN '✅ profiles.interested_in существует' ELSE '❌ profiles.interested_in НЕ НАЙДЕНА' END as status_interested_in; EOF echo "" echo "✅ Готово! Теперь можно перезапустить бота:" echo " docker compose restart bot"