172 lines
4.0 KiB
Markdown
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
|
|
|