Files
tg_tinder_bot/sql/fix_looking_for_column.sql
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

44 lines
2.0 KiB
PL/PgSQL
Raw Permalink 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.

-- Исправление триггера create_initial_profile и колонки looking_for
-- Дата: 2025-11-06
-- 1. Удаляем старую функцию триггера
DROP FUNCTION IF EXISTS create_initial_profile() CASCADE;
-- 2. Создаём исправленную функцию с полем looking_for
CREATE OR REPLACE FUNCTION create_initial_profile()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO profiles (user_id, name, age, gender, looking_for, interested_in)
VALUES (NEW.id, COALESCE(NEW.first_name, 'User'), 18, 'other', 'both', 'both');
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- 3. Пересоздаём триггер
DROP TRIGGER IF EXISTS create_profile_on_user_insert ON users;
DROP TRIGGER IF EXISTS create_profile_trigger ON users;
CREATE TRIGGER create_profile_on_user_insert
AFTER INSERT ON users
FOR EACH ROW
EXECUTE FUNCTION create_initial_profile();
-- 4. Делаем looking_for необязательным с дефолтным значением
ALTER TABLE profiles ALTER COLUMN looking_for DROP NOT NULL;
ALTER TABLE profiles ALTER COLUMN looking_for SET DEFAULT 'both';
-- 5. Добавляем interested_in как синоним для looking_for
ALTER TABLE profiles ADD COLUMN IF NOT EXISTS interested_in VARCHAR(20) DEFAULT 'both'
CHECK (interested_in IN ('male', 'female', 'both'));
-- 6. Обновляем существующие записи
UPDATE profiles SET looking_for = 'both' WHERE looking_for IS NULL;
UPDATE profiles SET interested_in = COALESCE(looking_for, 'both') WHERE interested_in IS NULL;
-- 7. Создаём индекс для поиска по interested_in
CREATE INDEX IF NOT EXISTS idx_profiles_interested_in ON profiles(interested_in);
COMMENT ON COLUMN profiles.looking_for IS 'Предпочитаемый пол для знакомства (устаревшее, используйте interested_in)';
COMMENT ON COLUMN profiles.interested_in IS 'Предпочитаемый пол для знакомства: male, female, both';