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
This commit is contained in:
43
sql/fix_looking_for_column.sql
Normal file
43
sql/fix_looking_for_column.sql
Normal file
@@ -0,0 +1,43 @@
|
||||
-- Исправление триггера 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';
|
||||
Reference in New Issue
Block a user