Files
explorer-monorepo/docs/VMID_5000_DATABASE_FIX_COMMANDS.md

5.4 KiB

Database Password Fix Commands for VMID 5000 (Blockscout)

Commands for Root User in VMID 5000

These commands should be run inside VMID 5000 as the root user. You can execute them using:

# From Proxmox host
pct exec 5000 -- bash -c "COMMAND_HERE"

# Or if you have shell access to VMID 5000
# (SSH into the container or use pct enter 5000)

Option 1: Fix Database Password (If PostgreSQL is Accessible from VMID 5000)

Step 1: Check Database Connectivity

# Check if PostgreSQL is accessible
pg_isready -h localhost -p 5432 -U explorer

# Or test connection
psql -h localhost -p 5432 -U postgres -c "SELECT version();"

Step 2: Reset Explorer User Password

# Connect as postgres superuser and reset password
psql -h localhost -p 5432 -U postgres << EOF
-- Create user if it doesn't exist, or update password if it does
DO \$\$
BEGIN
    IF NOT EXISTS (SELECT FROM pg_user WHERE usename = 'explorer') THEN
        CREATE USER explorer WITH PASSWORD 'changeme';
        RAISE NOTICE 'User explorer created';
    ELSE
        ALTER USER explorer WITH PASSWORD 'changeme';
        RAISE NOTICE 'User explorer password updated';
    END IF;
END
\$\$;

-- Create database if it doesn't exist
SELECT 'CREATE DATABASE explorer OWNER explorer'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'explorer')\gexec

-- Grant privileges
GRANT ALL PRIVILEGES ON DATABASE explorer TO explorer;
EOF

Step 3: Verify Connection

# Test connection with new password
PGPASSWORD=changeme psql -h localhost -p 5432 -U explorer -d explorer -c "SELECT 1;"

Option 2: If Database is on Different Host

If the database is running on a different host (e.g., 192.168.11.10 or another container):

Step 1: Check Network Connectivity

# Test if database host is reachable
ping -c 3 192.168.11.10

# Test if PostgreSQL port is accessible
nc -zv 192.168.11.10 5432
# Or
telnet 192.168.11.10 5432

Step 2: Reset Password on Remote Database

# Replace DB_HOST with actual database host IP
DB_HOST="192.168.11.10"  # or "localhost" if on same host

psql -h $DB_HOST -p 5432 -U postgres << EOF
DO \$\$
BEGIN
    IF NOT EXISTS (SELECT FROM pg_user WHERE usename = 'explorer') THEN
        CREATE USER explorer WITH PASSWORD 'changeme';
    ELSE
        ALTER USER explorer WITH PASSWORD 'changeme';
    END IF;
END
\$\$;

SELECT 'CREATE DATABASE explorer OWNER explorer'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'explorer')\gexec

GRANT ALL PRIVILEGES ON DATABASE explorer TO explorer;
EOF

Option 3: If Using Docker Compose in VMID 5000

If Blockscout is running via Docker Compose and the database is in a Docker container:

Step 1: Check Docker Containers

# List running containers
docker ps

# Check if postgres container is running
docker ps | grep postgres

Step 2: Access PostgreSQL Container

# Find postgres container name (adjust if different)
POSTGRES_CONTAINER=$(docker ps | grep postgres | awk '{print $1}')

# Reset password in postgres container
docker exec -it $POSTGRES_CONTAINER psql -U postgres << EOF
DO \$\$
BEGIN
    IF NOT EXISTS (SELECT FROM pg_user WHERE usename = 'explorer') THEN
        CREATE USER explorer WITH PASSWORD 'changeme';
    ELSE
        ALTER USER explorer WITH PASSWORD 'changeme';
    END IF;
END
\$\$;

SELECT 'CREATE DATABASE explorer OWNER explorer'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'explorer')\gexec

GRANT ALL PRIVILEGES ON DATABASE explorer TO explorer;
EOF

Option 4: Complete One-Line Fix (If PostgreSQL is Local)

# Single command to fix everything (run as root in VMID 5000)
psql -h localhost -p 5432 -U postgres -c "CREATE USER explorer WITH PASSWORD 'changeme';" 2>/dev/null || \
psql -h localhost -p 5432 -U postgres -c "ALTER USER explorer WITH PASSWORD 'changeme';" && \
psql -h localhost -p 5432 -U postgres -c "CREATE DATABASE explorer OWNER explorer;" 2>/dev/null && \
psql -h localhost -p 5432 -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE explorer TO explorer;"

Verification Commands

After running the fix, verify the connection:

# Test connection
PGPASSWORD=changeme psql -h localhost -p 5432 -U explorer -d explorer -c "SELECT current_user, current_database();"

# Check user exists
psql -h localhost -p 5432 -U postgres -c "\du explorer"

# Check database exists
psql -h localhost -p 5432 -U postgres -c "\l explorer"

Troubleshooting

If psql command not found:

# Install PostgreSQL client
apt-get update
apt-get install -y postgresql-client

If connection to postgres user fails:

# Check PostgreSQL authentication configuration
cat /etc/postgresql/*/main/pg_hba.conf | grep -v "^#"

# Or if using Docker, check container environment
docker exec $POSTGRES_CONTAINER env | grep POSTGRES

If database host is unknown:

# Find database host from Blockscout configuration
grep -r "DATABASE_URL\|DB_HOST\|POSTGRES" /opt/blockscout/ 2>/dev/null | head -10

# Or check docker-compose.yml
cat /opt/blockscout/docker-compose.yml | grep -E "POSTGRES|DATABASE" | head -10

Notes

  • Replace changeme with the actual password if different
  • Replace localhost with the actual database host if different
  • The database might be running in a separate container or on a different host
  • Check Blockscout's configuration to determine the correct database host and credentials