- Добавлена колонка 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
77 lines
3.0 KiB
Bash
Executable File
77 lines
3.0 KiB
Bash
Executable File
#!/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"
|