- Добавлена колонка 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
37 lines
1.9 KiB
SQL
37 lines
1.9 KiB
SQL
-- Добавление колонок job и state
|
||
-- Дата: 2025-11-06
|
||
-- Исправляет ошибки: "column job does not exist" и "State column does not exist"
|
||
|
||
-- 1. Добавляем колонку job в таблицу profiles (синоним для occupation)
|
||
ALTER TABLE profiles ADD COLUMN IF NOT EXISTS job VARCHAR(255);
|
||
|
||
-- 2. Копируем существующие данные из occupation в job
|
||
UPDATE profiles SET job = occupation WHERE occupation IS NOT NULL AND job IS NULL;
|
||
|
||
-- 3. Добавляем колонку state в таблицу users для отслеживания состояния диалога
|
||
ALTER TABLE users ADD COLUMN IF NOT EXISTS state VARCHAR(50);
|
||
|
||
-- 4. Создаём индексы для производительности
|
||
CREATE INDEX IF NOT EXISTS idx_profiles_job ON profiles(job);
|
||
CREATE INDEX IF NOT EXISTS idx_users_state ON users(state);
|
||
|
||
-- 5. Добавляем комментарии для документации
|
||
COMMENT ON COLUMN profiles.job IS 'Профессия/работа пользователя (синоним для occupation)';
|
||
COMMENT ON COLUMN profiles.occupation IS 'Профессия/работа пользователя (устаревшее, используйте job)';
|
||
COMMENT ON COLUMN users.state IS 'Текущее состояние пользователя в диалоге с ботом';
|
||
|
||
-- Проверка результата
|
||
SELECT
|
||
'profiles.job' as column_name,
|
||
CASE WHEN EXISTS (
|
||
SELECT 1 FROM information_schema.columns
|
||
WHERE table_name = 'profiles' AND column_name = 'job'
|
||
) THEN '✅ Существует' ELSE '❌ Не найдена' END as status
|
||
UNION ALL
|
||
SELECT
|
||
'users.state' as column_name,
|
||
CASE WHEN EXISTS (
|
||
SELECT 1 FROM information_schema.columns
|
||
WHERE table_name = 'users' AND column_name = 'state'
|
||
) THEN '✅ Существует' ELSE '❌ Не найдена' END as status;
|