# Local PostgreSQL Database Setup This guide will help you set up a local PostgreSQL database for development when you can't use the remote Supabase database. ## Step 1: Install PostgreSQL ### Windows 1. **Download PostgreSQL:** - Go to https://www.postgresql.org/download/windows/ - Download the installer from EnterpriseDB - Run the installer 2. **During installation:** - Remember the password you set for the `postgres` user - Default port is `5432` (keep this) - Install pgAdmin if you want a GUI (optional) 3. **Verify installation:** ```bash psql --version ``` ### macOS ```bash # Using Homebrew brew install postgresql@15 brew services start postgresql@15 # Or download from: https://www.postgresql.org/download/macosx/ ``` ### Linux (Ubuntu/Debian) ```bash sudo apt update sudo apt install postgresql postgresql-contrib sudo systemctl start postgresql sudo systemctl enable postgresql ``` ## Step 2: Configure Local Database 1. **Create `.env` file in `backend/` directory:** ```env # Local PostgreSQL Configuration LOCAL_DB_HOST=localhost LOCAL_DB_PORT=5432 LOCAL_DB_USER=postgres LOCAL_DB_PASSWORD=your_postgres_password LOCAL_DB_NAME=institutional_trader # Use local database (set this to use local instead of remote) USE_LOCAL_DB=true # Server Configuration PORT=3010 NODE_ENV=development # CORS Configuration CORS_ORIGIN=http://localhost:5173 ``` **Important:** Replace `your_postgres_password` with the password you set during PostgreSQL installation. ## Step 3: Set Up Database and Tables Run the setup script: ```bash cd backend npm run setup-local-db ``` This will: - ✅ Create the database `institutional_trader` - ✅ Create all necessary tables - ✅ Create indexes for performance - ✅ Test the connection ## Step 4: Import CSV Files Once the database is set up, import your CSV files: ```bash npm run import-csv ``` This will import: - `OptionsFlow.csv` → `OptionsFlow_monthly` table - `OptionsVolume.csv` → `OptionsVolume` table - `OptionsOpenInterest.csv` → `OptionsOpenInterest` table ## Step 5: Update Database Connection The system will automatically use the local database when `USE_LOCAL_DB=true` is set in your `.env` file. ## Troubleshooting ### Error: "Cannot connect to PostgreSQL server" 1. **Check if PostgreSQL is running:** ```bash # Windows # Check Services (services.msc) for "postgresql" service # macOS/Linux sudo systemctl status postgresql # or brew services list ``` 2. **Start PostgreSQL if not running:** ```bash # Windows: Start from Services # macOS brew services start postgresql@15 # Linux sudo systemctl start postgresql ``` 3. **Verify connection:** ```bash psql -U postgres -h localhost ``` ### Error: "password authentication failed" 1. Check your `.env` file has the correct password 2. Try resetting the postgres password: ```bash # Windows: Use pgAdmin or reset via Services # macOS/Linux sudo -u postgres psql ALTER USER postgres PASSWORD 'newpassword'; ``` ### Error: "database does not exist" Run the setup script again: ```bash npm run setup-local-db ``` ### Error: "permission denied" On Linux/macOS, you might need to: ```bash sudo -u postgres createdb institutional_trader ``` Or create a new user: ```bash sudo -u postgres createuser -s your_username ``` ## Using pgAdmin (Optional GUI) 1. Open pgAdmin (installed with PostgreSQL) 2. Connect to local server (password: your postgres password) 3. You can view/edit data, run queries, etc. ## Verify Setup After setup, verify everything works: ```bash # Test database connection cd backend npm run setup-local-db # Import CSV files npm run import-csv # Start server npm run dev ``` You should see: ``` ✅ Database connection successful (PostgreSQL direct) ``` ## Switching Between Local and Remote To switch between local and remote databases: **Use Local Database:** ```env USE_LOCAL_DB=true LOCAL_DB_HOST=localhost LOCAL_DB_PORT=5432 LOCAL_DB_USER=postgres LOCAL_DB_PASSWORD=your_password LOCAL_DB_NAME=institutional_trader ``` **Use Remote Database:** ```env USE_LOCAL_DB=false DATABASE_URL=postgresql://postgres:password@host:5432/database # OR SUPABASE_URL=https://your-project.supabase.co SUPABASE_SERVICE_KEY=your_key ``` ## Next Steps 1. ✅ PostgreSQL installed and running 2. ✅ Database created and tables set up 3. ✅ CSV files imported 4. ✅ Server running with local database You're ready to develop locally! 🎉