- Добавлена колонка 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
44 lines
2.0 KiB
PL/PgSQL
44 lines
2.0 KiB
PL/PgSQL
-- Исправление триггера 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';
|