institutional-trader/backend/TROUBLESHOOTING.md

147 lines
4.6 KiB
Markdown

# Troubleshooting Database Connection Issues
## Error: "Invalid API key"
This error occurs when your Supabase API key is missing, incorrect, or expired.
### Solution 1: Use Direct PostgreSQL Connection (RECOMMENDED)
For heavy SQL queries (which this system uses extensively), a direct PostgreSQL connection is faster and more reliable.
1. **Get your database connection string from Supabase:**
- Go to Supabase Dashboard
- Navigate to **Settings > Database**
- Find **Connection String** section
- Copy the **URI** connection string
- It should look like: `postgresql://postgres:[password]@db.[project-ref].supabase.co:5432/postgres`
2. **Add to your `.env` file:**
```env
DATABASE_URL=postgresql://postgres:your_password@db.your-project-ref.supabase.co:5432/postgres
```
3. **Restart your server**
The system will automatically use the direct PostgreSQL connection when `DATABASE_URL` is set, which bypasses API key issues entirely.
### Solution 2: Fix Supabase API Keys
If you prefer to use Supabase client:
1. **Get your Supabase credentials:**
- Go to Supabase Dashboard
- Navigate to **Settings > API**
- Copy the following:
- **Project URL** → `SUPABASE_URL`
- **service_role key** (secret) → `SUPABASE_SERVICE_KEY` ⚠️ **Use this one, not anon key**
2. **Create/update `.env` file in `backend/` directory:**
```env
# Supabase Configuration
SUPABASE_URL=https://your-project-ref.supabase.co
SUPABASE_SERVICE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... (your service_role key)
# Optional: Direct PostgreSQL connection (recommended for heavy queries)
DATABASE_URL=postgresql://postgres:password@db.project-ref.supabase.co:5432/postgres
# Server Configuration
PORT=3010
NODE_ENV=development
# CORS Configuration
CORS_ORIGIN=http://localhost:5173
```
3. **Important Notes:**
- ⚠️ **Use `service_role` key, NOT `anon` key** for backend operations
- The `service_role` key has admin privileges and bypasses Row Level Security
- Never expose the `service_role` key in frontend code
- Keep your `.env` file in `.gitignore` (it should already be there)
4. **Restart your server:**
```bash
cd backend
npm run dev
```
### Solution 3: Verify Environment Variables
Check that your environment variables are being loaded:
1. **Verify `.env` file exists:**
```bash
ls -la backend/.env
```
2. **Check if variables are loaded (add temporarily to test):**
```javascript
// In backend/src/db.js, add temporarily:
console.log('SUPABASE_URL:', process.env.SUPABASE_URL ? 'SET' : 'MISSING');
console.log('SUPABASE_SERVICE_KEY:', process.env.SUPABASE_SERVICE_KEY ? 'SET' : 'MISSING');
console.log('DATABASE_URL:', process.env.DATABASE_URL ? 'SET' : 'MISSING');
```
3. **Make sure `.env` file is in the correct location:**
- Should be: `backend/.env`
- NOT: `.env` (root directory)
- NOT: `backend/src/.env`
### Common Issues
#### Issue: "Missing Supabase environment variables"
- **Cause:** `.env` file doesn't exist or variables are misspelled
- **Fix:** Create `.env` file with correct variable names (case-sensitive)
#### Issue: "Invalid API key" but key looks correct
- **Cause:** Using `anon` key instead of `service_role` key
- **Fix:** Use the `service_role` key from Supabase Dashboard > Settings > API
#### Issue: Connection works but queries fail
- **Cause:** Missing `exec_sql` RPC function in Supabase
- **Fix:** Use `DATABASE_URL` for direct PostgreSQL connection (recommended)
#### Issue: Environment variables not loading
- **Cause:** `.env` file in wrong location or `dotenv` not configured
- **Fix:** Ensure `.env` is in `backend/` directory and `dotenv.config()` is called in `db.js`
### Recommended Setup
For best performance with this trading system, use **direct PostgreSQL connection**:
```env
# Direct PostgreSQL Connection (RECOMMENDED)
DATABASE_URL=postgresql://postgres:your_password@db.your-project-ref.supabase.co:5432/postgres
# Optional: Supabase client (for simple queries)
SUPABASE_URL=https://your-project-ref.supabase.co
SUPABASE_SERVICE_KEY=your_service_role_key
```
This setup:
- ✅ Faster query execution
- ✅ No API key issues
- ✅ Direct SQL access
- ✅ Better for heavy analytical queries
### Testing Connection
After fixing your configuration, test the connection:
```bash
cd backend
npm run dev
```
You should see:
```
✅ Database connection successful (PostgreSQL direct)
```
Or:
```
✅ Database connection successful (Supabase)
```
If you still see errors, check the console output for specific error messages and refer to the troubleshooting steps above.