trax/scripts/setup_postgresql.sh

127 lines
4.1 KiB
Bash
Executable File

#!/bin/bash
# PostgreSQL Setup Script for Trax Development
# This script helps set up PostgreSQL locally for development
set -e
echo "🐘 PostgreSQL Setup for Trax Development"
echo "========================================"
# Check if PostgreSQL is installed
if ! command -v psql &> /dev/null; then
echo "❌ PostgreSQL is not installed."
echo ""
echo "📦 Installation Options:"
echo "1. macOS (using Homebrew): brew install postgresql@14"
echo "2. Ubuntu/Debian: sudo apt-get install postgresql-14"
echo "3. CentOS/RHEL: sudo yum install postgresql14-server"
echo "4. Windows: Download from https://www.postgresql.org/download/windows/"
echo ""
echo "After installation, run this script again."
exit 1
fi
echo "✅ PostgreSQL is installed"
# Check if PostgreSQL service is running
if ! pg_isready -q; then
echo "⚠️ PostgreSQL service is not running."
echo ""
echo "🚀 Starting PostgreSQL service..."
# Try to start PostgreSQL (platform-specific)
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS
if command -v brew &> /dev/null; then
brew services start postgresql@14 || brew services start postgresql
else
echo "❌ Please start PostgreSQL manually or install via Homebrew"
exit 1
fi
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
# Linux
sudo systemctl start postgresql || sudo service postgresql start
else
echo "❌ Please start PostgreSQL manually for your platform"
exit 1
fi
# Wait a moment for the service to start
sleep 3
fi
echo "✅ PostgreSQL service is running"
# Check if trax database exists
if psql -lqt | cut -d \| -f 1 | grep -qw trax; then
echo "✅ Database 'trax' already exists"
else
echo "📊 Creating database 'trax'..."
# Try to create database as current user first
if createdb trax 2>/dev/null; then
echo "✅ Database 'trax' created successfully"
else
echo "⚠️ Could not create database as current user"
echo " Trying with postgres user..."
# Try with postgres user
if sudo -u postgres createdb trax 2>/dev/null; then
echo "✅ Database 'trax' created successfully with postgres user"
else
echo "❌ Could not create database 'trax'"
echo ""
echo "🔧 Manual Setup Required:"
echo "1. Connect to PostgreSQL as superuser:"
echo " sudo -u postgres psql"
echo "2. Create database:"
echo " CREATE DATABASE trax;"
echo "3. Create user (optional):"
echo " CREATE USER trax_user WITH PASSWORD 'your_password';"
echo " GRANT ALL PRIVILEGES ON DATABASE trax TO trax_user;"
echo "4. Exit:"
echo " \\q"
exit 1
fi
fi
fi
# Test connection
echo "🔌 Testing database connection..."
if psql -d trax -c "SELECT version();" > /dev/null 2>&1; then
echo "✅ Database connection successful"
else
echo "❌ Database connection failed"
echo ""
echo "🔧 Troubleshooting:"
echo "1. Check if PostgreSQL is running: pg_isready"
echo "2. Check database exists: psql -l"
echo "3. Test connection: psql -d trax"
exit 1
fi
# Enable JSONB extension (should be enabled by default in PostgreSQL 9.4+)
echo "🔧 Checking JSONB support..."
if psql -d trax -c "SELECT 'jsonb'::regtype;" > /dev/null 2>&1; then
echo "✅ JSONB support is available"
else
echo "❌ JSONB support not available"
echo " This might indicate an older PostgreSQL version"
echo " JSONB requires PostgreSQL 9.4 or later"
exit 1
fi
echo ""
echo "🎉 PostgreSQL setup completed successfully!"
echo ""
echo "📋 Next Steps:"
echo "1. Run the database test: uv run python test_database_setup.py"
echo "2. Create initial migration: uv run alembic revision --autogenerate -m 'Initial schema'"
echo "3. Apply migration: uv run alembic upgrade head"
echo ""
echo "🔧 Configuration:"
echo " Database URL: postgresql://localhost/trax"
echo " Database Name: trax"
echo " Host: localhost"
echo " Port: 5432"