Files
Church-Music/legacy-site/backend/fix_schema.sql

92 lines
3.0 KiB
SQL

-- Database Schema Fix Script
-- Run this as the database owner (songlyric_app) or postgres superuser
-- psql -h 192.168.10.130 -U songlyric_app -d church_songlyric -f fix_schema.sql
\echo '============================================================'
\echo 'DATABASE SCHEMA FIX SCRIPT'
\echo '============================================================'
-- Add missing indexes on songs table
\echo ''
\echo '📊 Adding indexes on songs table...'
CREATE INDEX IF NOT EXISTS idx_song_title ON songs(title);
CREATE INDEX IF NOT EXISTS idx_song_artist ON songs(artist);
CREATE INDEX IF NOT EXISTS idx_song_band ON songs(band);
\echo ' ✅ Song indexes created'
-- Add missing indexes on plans table
\echo ''
\echo '📊 Adding indexes on plans table...'
CREATE INDEX IF NOT EXISTS idx_plan_date ON plans(date);
CREATE INDEX IF NOT EXISTS idx_plan_profile ON plans(profile_id);
\echo ' ✅ Plan indexes created'
-- Add missing index on profiles table
\echo ''
\echo '📊 Adding index on profiles table...'
CREATE INDEX IF NOT EXISTS idx_profile_name ON profiles(name);
\echo ' ✅ Profile index created'
-- Fix plans.date to NOT NULL
\echo ''
\echo '🔧 Fixing plans.date constraint...'
UPDATE plans SET date = '2025-01-01' WHERE date IS NULL;
ALTER TABLE plans ALTER COLUMN date SET NOT NULL;
\echo ' ✅ plans.date is now NOT NULL'
-- Fix profiles.name to NOT NULL
\echo ''
\echo '🔧 Fixing profiles.name constraint...'
UPDATE profiles SET name = 'Unnamed' WHERE name IS NULL OR name = '';
ALTER TABLE profiles ALTER COLUMN name SET NOT NULL;
\echo ' ✅ profiles.name is now NOT NULL'
-- Add unique constraint on plan_songs (drop if exists first to avoid error)
\echo ''
\echo '🔧 Adding unique constraint on plan_songs...'
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conname = 'uq_plan_song'
) THEN
ALTER TABLE plan_songs ADD CONSTRAINT uq_plan_song UNIQUE (plan_id, song_id);
RAISE NOTICE ' ✅ uq_plan_song constraint created';
ELSE
RAISE NOTICE ' ✅ uq_plan_song constraint already exists';
END IF;
END $$;
-- Add order index on plan_songs
\echo ''
\echo '📊 Adding order index on plan_songs...'
CREATE INDEX IF NOT EXISTS idx_plan_songs_order ON plan_songs(plan_id, order_index);
\echo ' ✅ idx_plan_songs_order created'
\echo ''
\echo '============================================================'
\echo '✅ DATABASE SCHEMA FIX COMPLETE!'
\echo '============================================================'
\echo ''
\echo 'Summary of changes:'
\echo ' • Added indexes on songs (title, artist, band)'
\echo ' • Added indexes on plans (date, profile_id)'
\echo ' • Added index on profiles (name)'
\echo ' • Fixed plans.date to NOT NULL'
\echo ' • Fixed profiles.name to NOT NULL'
\echo ' • Added unique constraint on plan_songs'
\echo ' • Added order index on plan_songs'
\echo ''
-- Show final schema
\echo 'Verification - Song indexes:'
\d songs
\echo ''
\echo 'Verification - Plan indexes:'
\d plans
\echo ''
\echo 'Verification - Plan Songs:'
\d plan_songs