Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Troubleshooting

Temp edited this page Oct 3, 2025 · 1 revision

Troubleshooting

Common issues and solutions for PostgreSQL MCP Server.


πŸ” Quick Diagnostics

Check MCP Server Status

# Test basic connectivity
list_schemas()
# Check database health
analyze_db_health(health_type="all")
# Verify extensions
get_top_queries(sort_by="total_time", limit=1)

πŸ”Œ Connection Issues

"Connection Refused"

Symptoms:

  • Can't connect to database
  • MCP server times out
  • "Connection refused" error

Solutions:

  1. Verify PostgreSQL is running:

    # Check if PostgreSQL is listening
    pg_isready -h localhost -p 5432
    # Or check service status
    sudo systemctl status postgresql
  2. Check DATABASE_URI:

    echo $DATABASE_URI
    # Should be: postgresql://user:pass@host:5432/dbname
  3. Verify firewall rules:

    # Test connection
    telnet hostname 5432
    # Or
    nc -zv hostname 5432
  4. Check pg_hba.conf (PostgreSQL access control):

    # Allow connections from your IP
    host all all 192.168.1.0/24 md5
    

"Authentication Failed"

Symptoms:

  • "password authentication failed"
  • "role does not exist"

Solutions:

  1. Test credentials manually:

    psql "postgresql://user:pass@host:5432/db"
  2. Verify user exists:

    -- As superuser
    SELECT usename FROM pg_user;
  3. Reset password:

    ALTER USER username PASSWORD 'new_password';
  4. Check pg_hba.conf authentication method:

    # Use md5 or scram-sha-256, not trust/reject
    host all all 0.0.0.0/0 scram-sha-256
    

"Database Does Not Exist"

Solution:

-- Create database
CREATE DATABASE mydb;
-- Or use existing database
\l -- List all databases

🧩 Extension Issues

"Extension Not Found"

Symptoms:

  • get_top_queries returns "pg_stat_statements not installed"
  • vector_search returns "pgvector extension not installed"

Solutions:

  1. Check installed extensions:

    SELECT extname, extversion FROM pg_extension;
  2. Install missing extensions:

    CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
    CREATE EXTENSION IF NOT EXISTS pg_trgm;
    CREATE EXTENSION IF NOT EXISTS fuzzystrmatch;
  3. For pg_stat_statements - requires restart:

    # Edit postgresql.conf
    shared_preload_libraries = 'pg_stat_statements'
    sudo systemctl restart postgresql

See Extension Setup for detailed installation.


"Permission Denied Creating Extension"

Solution:

# Connect as superuser
psql -U postgres -d mydb
# Create extension
CREATE EXTENSION pg_stat_statements;
# Grant permissions
GRANT USAGE ON SCHEMA public TO mcp_user;

⚠️ Query Execution Issues

"Potential SQL Injection Detected"

Symptoms:

  • Query rejected with injection warning
  • "Use parameter binding" error

Solution:

# ❌ WRONG: String concatenation
execute_sql(f"SELECT * FROM users WHERE id = {user_id}")
# βœ… CORRECT: Parameter binding
execute_sql(
 sql="SELECT * FROM users WHERE id = %s",
 params=[user_id]
)

"Operation Not Allowed in Restricted Mode"

Symptoms:

  • INSERT/UPDATE/DELETE blocked
  • DDL operations rejected

Solutions:

Option 1: Use appropriate tool for operation

# For JSON updates
json_update(table_name="users", json_column="profile", ...)
# For inserts
json_insert(table_name="users", json_column="profile", ...)

Option 2: Switch to unrestricted mode (development only)

postgres-mcp --access-mode=unrestricted

"Statement Timeout"

Symptoms:

  • Query times out
  • "canceling statement due to statement timeout"

Solutions:

  1. Optimize query:

    # Check query plan
    explain_query(sql="...", analyze=True)
    # Get index recommendations
    suggest_indexes(use_query_log=True)
  2. Increase timeout:

    SET statement_timeout = '60s';
  3. Add to connection string:

    DATABASE_URI="postgresql://user:pass@host/db?options=-c statement_timeout=60s"

🐳 Docker Issues

Container Exits Immediately

Solution:

# Check logs
docker logs <container_id>
# Verify DATABASE_URI is set
docker run -i --rm \
 -e DATABASE_URI="postgresql://..." \
 neverinfamous/postgres-mcp:latest
# Ensure -i flag for interactive mode

Can't Connect to Host Database

For localhost database (from Docker):

# Use host.docker.internal instead of localhost
DATABASE_URI="postgresql://user:pass@host.docker.internal:5432/db"
# Or use host network mode
docker run -i --rm --network=host \
 -e DATABASE_URI="postgresql://user:pass@localhost:5432/db" \
 neverinfamous/postgres-mcp:latest

πŸ“Š Performance Issues

Slow Query Performance

Diagnosis:

# 1. Find slow queries
slow = get_top_queries(sort_by="mean_time", limit=10)
# 2. Analyze execution plan
for query in slow["queries"]:
 plan = explain_query(sql=query["query"], analyze=True)
# 3. Get index suggestions
suggestions = suggest_indexes(use_query_log=True)
# 4. Check resource usage
resources = resource_usage_analyze(
 include_cpu=True,
 include_memory=True,
 include_io=True
)

Solutions:

  • Add recommended indexes
  • Optimize queries
  • Increase shared_buffers
  • Add more CPU/memory

High Memory Usage

Diagnosis:

metrics = monitor_real_time(include_io=True)
resources = resource_usage_analyze(include_memory=True)

Solutions:

-- Reduce work_mem for large queries
SET work_mem = '64MB';
-- Reduce maintenance_work_mem
SET maintenance_work_mem = '256MB';
-- Check for memory leaks
SELECT * FROM pg_stat_activity WHERE state != 'idle';

Cache Hit Ratio Too Low

Check ratio:

resources = resource_usage_analyze(include_io=True)
# Look for buffer_cache_hit_ratio < 95%

Solutions:

-- Increase shared_buffers (requires restart)
-- In postgresql.conf
shared_buffers = 4GB # 25% of RAM
-- Or investigate disk-heavy queries

πŸ” Security Issues

SSL/TLS Connection Failures

Solutions:

  1. Verify SSL mode:

    DATABASE_URI="postgresql://user:pass@host/db?sslmode=require"
  2. Check PostgreSQL SSL configuration:

    SHOW ssl; -- Should be 'on'
  3. Try different SSL modes:

    • sslmode=disable - No SSL (testing only)
    • sslmode=prefer - Try SSL, fall back
    • sslmode=require - Require SSL
    • sslmode=verify-ca - Verify certificate

Permission Errors

For read-only operations:

GRANT CONNECT ON DATABASE mydb TO mcp_user;
GRANT USAGE ON SCHEMA public TO mcp_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_user;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO mcp_user;

For unrestricted mode:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO mcp_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO mcp_user;

πŸ”§ Tool-Specific Issues

pg_stat_statements Not Collecting Data

Check configuration:

SHOW shared_preload_libraries;
-- Must include 'pg_stat_statements'
SHOW pg_stat_statements.track;
-- Should be 'all'

Reset statistics:

SELECT pg_stat_statements_reset();

Vector Search Returns No Results

Verify pgvector:

SELECT '[1,2,3]'::vector;
-- Check vector column exists
\d+ your_table

Test query:

# Ensure vector dimensions match
vector_search(
 table_name="documents",
 vector_column="embedding",
 query_vector=[0.1, 0.2, 0.3], # Same dimensions as stored vectors
 limit=5
)

Hypothetical Index Test Fails

Verify HypoPG:

SELECT * FROM hypopg_list_indexes();

If not installed:

  • Use suggest_indexes instead (works without HypoPG)
  • Or install HypoPG (Extension Setup)

πŸ†˜ Getting Help

1. Gather Information

# Database health
health = analyze_db_health(health_type="all")
# Extension status
extensions = execute_sql("SELECT extname, extversion FROM pg_extension")
# Server version
version = execute_sql("SELECT version()")
# Recent errors
logs = execute_sql("""
 SELECT * FROM pg_stat_activity
 WHERE state = 'idle in transaction'
 OR wait_event IS NOT NULL
""")

2. Check Logs

PostgreSQL logs:

# Ubuntu/Debian
tail -f /var/log/postgresql/postgresql-16-main.log
# macOS (Homebrew)
tail -f /usr/local/var/log/postgres.log
# Docker
docker logs postgres-container

MCP Server logs:

# Docker
docker logs mcp-container
# Python installation
# Check terminal output or application logs

3. Open an Issue

If you can't resolve the issue, open a GitHub issue with:

  • PostgreSQL version
  • MCP server version
  • Extension versions
  • Full error message
  • Minimal reproduction steps
  • Database health output

πŸ“š Related Documentation


πŸ”— External Resources


See Home for more tool categories.

Clone this wiki locally

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /