72 lines
3.3 KiB
Bash
72 lines
3.3 KiB
Bash
#!/bin/bash
|
|
# Database Schema Fix Script
|
|
# Run with proper PostgreSQL credentials
|
|
|
|
export PGPASSWORD='MySecurePass123'
|
|
PSQL="psql -h 192.168.10.130 -U songlyric_user -d church_songlyric"
|
|
|
|
echo "============================================================"
|
|
echo "DATABASE SCHEMA FIX SCRIPT"
|
|
echo "============================================================"
|
|
|
|
# Add missing indexes on songs table
|
|
echo ""
|
|
echo "📊 Adding indexes on songs table..."
|
|
$PSQL -c "CREATE INDEX IF NOT EXISTS idx_song_title ON songs(title);" 2>&1 | grep -v "already exists" || echo " ✅ idx_song_title created"
|
|
$PSQL -c "CREATE INDEX IF NOT EXISTS idx_song_artist ON songs(artist);" 2>&1 | grep -v "already exists" || echo " ✅ idx_song_artist created"
|
|
$PSQL -c "CREATE INDEX IF NOT EXISTS idx_song_band ON songs(band);" 2>&1 | grep -v "already exists" || echo " ✅ idx_song_band created"
|
|
|
|
# Add missing indexes on plans table
|
|
echo ""
|
|
echo "📊 Adding indexes on plans table..."
|
|
$PSQL -c "CREATE INDEX IF NOT EXISTS idx_plan_date ON plans(date);" 2>&1 | grep -v "already exists" || echo " ✅ idx_plan_date created"
|
|
$PSQL -c "CREATE INDEX IF NOT EXISTS idx_plan_profile ON plans(profile_id);" 2>&1 | grep -v "already exists" || echo " ✅ idx_plan_profile created"
|
|
|
|
# Add missing index on profiles table
|
|
echo ""
|
|
echo "📊 Adding indexes on profiles table..."
|
|
$PSQL -c "CREATE INDEX IF NOT EXISTS idx_profile_name ON profiles(name);" 2>&1 | grep -v "already exists" || echo " ✅ idx_profile_name created"
|
|
|
|
# Fix plans.date to NOT NULL
|
|
echo ""
|
|
echo "🔧 Fixing plans.date constraint..."
|
|
$PSQL -c "UPDATE plans SET date = '2025-01-01' WHERE date IS NULL;" 2>&1
|
|
$PSQL -c "ALTER TABLE plans ALTER COLUMN date SET NOT NULL;" 2>&1 && echo " ✅ plans.date is now NOT NULL"
|
|
|
|
# Fix profiles.name to NOT NULL
|
|
echo ""
|
|
echo "🔧 Fixing profiles.name constraint..."
|
|
$PSQL -c "UPDATE profiles SET name = 'Unnamed' WHERE name IS NULL OR name = '';" 2>&1
|
|
$PSQL -c "ALTER TABLE profiles ALTER COLUMN name SET NOT NULL;" 2>&1 && echo " ✅ profiles.name is now NOT NULL"
|
|
|
|
# Add unique constraint on plan_songs (if doesn't exist)
|
|
echo ""
|
|
echo "🔧 Adding unique constraint on plan_songs..."
|
|
$PSQL -c "ALTER TABLE plan_songs ADD CONSTRAINT uq_plan_song UNIQUE (plan_id, song_id);" 2>&1 | grep -v "already exists" && echo " ✅ uq_plan_song constraint created" || echo " ✅ constraint already exists"
|
|
|
|
# Add order index on plan_songs
|
|
echo ""
|
|
echo "📊 Adding order index on plan_songs..."
|
|
$PSQL -c "CREATE INDEX IF NOT EXISTS idx_plan_songs_order ON plan_songs(plan_id, order_index);" 2>&1 | grep -v "already exists" || 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 ""
|
|
|
|
# Verify schema
|
|
echo "Verifying changes..."
|
|
$PSQL -c "\d+ songs" | head -20
|
|
$PSQL -c "\d+ plans" | head -20
|
|
$PSQL -c "\d+ plan_songs" | head -20
|