127 lines
4.1 KiB
Bash
Executable File
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"
|