Files
tg_tinder_bot/bin/apply_all_patches.sh
Andrew K. Choi 88d9ccd75d fix(database): Исправлены критические ошибки БД - job, state, looking_for
- Добавлена колонка job в profiles (устраняет ошибку column job does not exist)
- Добавлена колонка state в users (устраняет предупреждения State column does not exist)
- Исправлен триггер create_initial_profile() для включения looking_for
- Колонка looking_for сделана nullable с DEFAULT 'both'
- Добавлена колонка interested_in как современный синоним для looking_for
- Созданы индексы для производительности: idx_profiles_job, idx_users_state, idx_profiles_interested_in

Патчи:
- sql/fix_looking_for_column.sql
- sql/add_job_and_state_columns.sql

Утилиты:
- bin/apply_all_patches.sh - автоматическое применение всех патчей

Документация:
- docs/DATABASE_FIXES.md - подробное описание исправлений
- docs/HEALTH_CHECK.md - чеклист проверки здоровья бота
- docs/FIXES_SUMMARY_2025-11-06.md - краткая сводка изменений

Fixes: #job-column-error #state-column-warning #looking-for-constraint
2025-11-06 10:30:35 +09:00

77 lines
3.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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"