Files
explorer-monorepo/docs/DATABASE_CONNECTION_GUIDE.md

172 lines
4.0 KiB
Markdown

# Database Connection Guide
## Important: Two Different Database Users
There are **two separate database systems**:
1. **Blockscout Database** (for Blockscout explorer)
- User: `blockscout`
- Password: `blockscout`
- Database: `blockscout`
2. **Custom Explorer Backend Database** (for tiered architecture)
- User: `explorer`
- Password: `L@ker$2010`
- Database: `explorer`
## Correct Connection Command
For the **custom explorer backend** (tiered architecture), use:
```bash
PGPASSWORD='L@ker$2010' psql -h localhost -U explorer -d explorer -c "SELECT 1;"
```
**NOT:**
```bash
# ❌ Wrong - this is for Blockscout
PGPASSWORD='blockscout' psql -h localhost -U blockscout -d explorer -c "SELECT 1;"
```
## Step-by-Step Database Setup
### 1. Test Connection
```bash
# Test connection to custom explorer database
PGPASSWORD='L@ker$2010' psql -h localhost -U explorer -d explorer -c "SELECT version();"
```
### 2. Check if Tables Exist
```bash
# Check for track schema tables
PGPASSWORD='L@ker$2010' psql -h localhost -U explorer -d explorer -c "
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name IN ('wallet_nonces', 'operator_roles', 'addresses', 'token_transfers')
ORDER BY table_name;
"
```
### 3. Run Migration (if tables don't exist)
```bash
cd explorer-monorepo
PGPASSWORD='L@ker$2010' psql -h localhost -U explorer -d explorer \
-f backend/database/migrations/0010_track_schema.up.sql
```
### 4. Verify Migration
```bash
# Should return 4 or more
PGPASSWORD='L@ker$2010' psql -h localhost -U explorer -d explorer -c "
SELECT COUNT(*) as table_count
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name IN ('wallet_nonces', 'operator_roles', 'addresses', 'token_transfers', 'analytics_flows', 'operator_events');
"
```
## Troubleshooting
### If Connection Fails
1. **Check if PostgreSQL is running:**
```bash
systemctl status postgresql
```
2. **Check if user exists:**
```bash
# Connect as postgres superuser
sudo -u postgres psql -c "\du"
```
You should see both `blockscout` and `explorer` users.
3. **Check if database exists:**
```bash
sudo -u postgres psql -c "\l"
```
You should see both `blockscout` and `explorer` databases.
4. **Create user and database if missing:**
```bash
sudo -u postgres psql << EOF
CREATE USER explorer WITH PASSWORD 'L@ker\$2010';
CREATE DATABASE explorer OWNER explorer;
GRANT ALL PRIVILEGES ON DATABASE explorer TO explorer;
\q
EOF
```
### If Password Authentication Fails
1. **Verify password is correct:**
- Custom explorer: `L@ker$2010`
- Blockscout: `blockscout`
2. **Check pg_hba.conf:**
```bash
sudo cat /etc/postgresql/*/main/pg_hba.conf | grep -E "(local|host.*explorer)"
```
Should allow password authentication for local connections.
3. **Reload PostgreSQL:**
```bash
sudo systemctl reload postgresql
```
## Quick Fix Script
Use the provided script:
```bash
cd explorer-monorepo
export DB_PASSWORD='L@ker$2010'
bash scripts/fix-database-connection.sh
```
This script will:
- Test the connection
- Check for existing tables
- Run migration if needed
- Provide next steps
## After Database is Connected
1. **Restart API server with database:**
```bash
pkill -f api-server
cd explorer-monorepo/backend
export DB_PASSWORD='L@ker$2010'
export JWT_SECRET='your-secret-here'
./bin/api-server
```
2. **Verify health endpoint:**
```bash
curl http://localhost:8080/health
```
Should show database as "ok" instead of "error".
3. **Test authentication:**
```bash
curl -X POST http://localhost:8080/api/v1/auth/nonce \
-H 'Content-Type: application/json' \
-d '{"address":"0x1234567890123456789012345678901234567890"}'
```
## Summary
- **Custom Explorer Backend:** Use `explorer` user with password `L@ker$2010`
- **Blockscout:** Use `blockscout` user with password `blockscout`
- **They are separate systems** with separate databases