How to fix P6000: Server cannot be reached (Pulse) in Prisma

PrismaINTERMEDIATECRITICALUpdated Dec 29, 2025· 99 views

This error occurs when Prisma Pulse cannot establish a connection to your database server, typically due to network issues, incorrect connection strings, firewall restrictions, or database unavailability. Resolving connectivity is essential for enabling real-time subscriptions.

Quick fix

Fixes P6000

# PostgreSQL example - verify all components
postgresql://username:password@hostname:5432/database?sslmode=require

# Common issues:
# - Wrong hostname (use FQDN, not localhost)
# - Wrong port (PostgreSQL default 5432, MySQL 3306)
# - Missing or incorrect password
# - Database name typo
# - Special characters in password not URL-encoded
  1. Verify your database connection string is correct
  2. Ensure your database is publicly accessible
  3. Check SSL/TLS configuration
  4. Test connectivity with a simple query
prisma — error
# PostgreSQL example - verify all components
postgresql://username:password@hostname:5432/database?sslmode=require
# Common issues:
# - Wrong hostname (use FQDN, not localhost)
# - Wrong port (PostgreSQL default 5432, MySQL 3306)
# - Missing or incorrect password
# - Database name typo
# - Special characters in password not URL-encoded
P6000: Server cannot be reached (Pulse)

What this error means

The P6000 error indicates that Prisma Pulse infrastructure cannot reach your database server at the configured hostname and port. Prisma Pulse provides real-time database subscriptions and change notifications, but requires stable network connectivity to your database. Unlike the standard Prisma ORM which can run on the same machine or local network, Pulse needs to connect from Prisma's infrastructure to your database over the internet. This means your database must be publicly accessible (or have proper firewall rules configured) for Pulse to function. When this error occurs, all Pulse subscriptions will fail, preventing your application from receiving real-time database updates. The error typically indicates a network/connectivity problem rather than an application logic issue.

Typical symptoms

  • Pulse subscriptions fail immediately with P6000 error
  • Real-time database change notifications are not received
  • Error message: "Server cannot be reached (Pulse)"
  • Prisma ORM works fine but Pulse operations fail
  • Connection timeouts or immediate connection failures
  • Application logs show P6000 errors across all database operations via Pulse

Common causes

  1. Database is not publicly accessible or has firewall rules blocking Prisma Pulse IPs
  2. Incorrect DATABASE_URL connection string (wrong host, port, or credentials)
  3. Database server is down or not responding
  4. Network connectivity issue between Prisma infrastructure and your database
  5. Self-signed SSL certificates without proper configuration
  6. Database requires VPC or private network access not yet supported by Pulse
  7. Connection string parameters incompatible with Pulse (certain sslmode settings)
  8. Regional latency or geographic restrictions preventing connection

How to fix "P6000: Server cannot be reached (Pulse)"

1Verify your database connection string is correct

Double-check that your DATABASE_URL has the correct format and credentials. Connection string syntax varies by database type.

bash
# PostgreSQL example - verify all components
postgresql://username:password@hostname:5432/database?sslmode=require

# Common issues:
# - Wrong hostname (use FQDN, not localhost)
# - Wrong port (PostgreSQL default 5432, MySQL 3306)
# - Missing or incorrect password
# - Database name typo
# - Special characters in password not URL-encoded

Test the connection string in a tool like psql or mysql client to verify it works outside Prisma:

bash
# PostgreSQL test
psql postgresql://username:password@hostname:5432/database

# If connection works here but not in Pulse, the issue is specific to Pulse's access
2Ensure your database is publicly accessible

Prisma Pulse requires your database to be reachable from the internet. Check your database hosting provider.

For cloud databases (Supabase, Railway, PlanetScale, etc.):
- Verify database access is allowed from anywhere (0.0.0.0/0) or specific Prisma IPs
- Check security groups, firewall rules, and network ACLs
- Ensure the public IP/hostname is being used, not private VPC IPs

For self-hosted databases:
- Confirm the database server is running and listening on the configured port
- Check that firewall rules allow inbound connections on the database port
- Verify you're using the public IP or FQDN, not localhost or private IPs

Configuration example for PostgreSQL on a cloud provider:

bash
# Supabase - use the public hostname provided in settings
postgresql://user:password@db.supabase.co:5432/postgres

# Railway - verify the public domain is enabled
postgresql://user:password@railway-app-prod.railway.app:5432/postgres

# AWS RDS - use the publicly accessible endpoint
postgresql://user:password@mydb.c9akciq32.us-east-1.rds.amazonaws.com:5432/postgres

If your database must be private, wait for Prisma's static IP feature which is in development.

3Check SSL/TLS configuration

Prisma Pulse has specific SSL requirements that differ from standard Prisma ORM.

typescript
// Pulse currently does NOT support self-signed certificates well
// If using a self-signed cert, try disabling SSL verification:
// DATABASE_URL=postgresql://...?sslmode=disable

// However, this is not recommended for production
// Better approach: use `sslmode=require` with a valid certificate
// DATABASE_URL=postgresql://...?sslmode=require

Troubleshooting SSL issues:

1. If you have a self-signed certificate:
- Contact your database provider about getting a valid SSL certificate
- As a temporary workaround, you may need to disable SSL (sslmode=disable) for Pulse only
- This is not secure - fix the certificate issue permanently

2. If SSL connection is failing:
- Verify the certificate chain is complete and valid
- Check certificate expiration date
- Ensure the certificate's CN or SAN matches your database hostname

bash
# Test certificate validity
openssl s_client -connect hostname:5432
4Test connectivity with a simple query

Create a minimal test to isolate whether the issue is with Pulse or general connectivity.

typescript
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function testConnection() {
  try {
    // Test 1: Regular Prisma ORM works
    const result = await prisma.$queryRaw`SELECT 1`;
    console.log('✓ Prisma ORM connection works:', result);
  } catch (error) {
    console.error('✗ Prisma ORM connection failed:', error);
    return;
  }

  try {
    // Test 2: Pulse subscription can connect
    const subscription = await prisma.user.subscribe({
      create: { after: true }
    });
    console.log('✓ Pulse subscription works');
    subscription.stop();
  } catch (error: any) {
    console.error('✗ Pulse subscription failed:', error.message);
  }

  await prisma.$disconnect();
}

testConnection();

If ORM works but Pulse fails:
- The issue is specific to Pulse's connection path
- Check firewall rules that might block Pulse's specific IPs
- Contact your database provider about Pulse compatibility

5Check database server status and resources

Verify your database is running and has resources available.

bash
# For cloud databases, check the provider's dashboard:
# - Supabase: Check project status and uptime
# - Railway: Verify service is running
# - PlanetScale: Check server status and connection status
# - AWS RDS: Check instance status in AWS Console

# For self-hosted:
# Check if the database process is running
systemctl status postgresql

# Check disk space (database needs space to accept connections)
df -h

# Check if database is accepting connections
# Try connecting with a database client

# Check database logs for errors
tail -f /var/log/postgresql/postgresql.log

If the database is down or out of resources:
- Restart the database service
- Free up disk space if needed
- Check resource usage (CPU, memory)

6Verify DATABASE_URL is set correctly in environment

Ensure the DATABASE_URL environment variable is properly set where Pulse needs it.

bash
# Check that DATABASE_URL is available in your environment
echo $DATABASE_URL

# For Vercel/Railway/other platforms, verify the variable is set in deployment settings
# This is often a common source of P6000 errors in production

# For local development, ensure .env or .env.local has:
DATABASE_URL=postgresql://username:password@host:port/database?sslmode=require

# Do not commit .env files with credentials to git
echo ".env.local" >> .gitignore

Production checklist:
- DATABASE_URL is set in platform secrets/environment variables
- No typos in the connection string
- Credentials are correct and haven't expired
- The database host is reachable from the deployment platform

7Check for regional or network restrictions

If all else fails, there might be network-level restrictions.

bash
# Test network connectivity to the database host
telnet hostname 5432

# Or with nc (nc might not be available, but telnet usually is)
nc -zv hostname 5432

# Try from your deployment platform environment
# (e.g., SSH into a Vercel function, Railway container, etc.)

Known limitations:
- Pulse requires databases to be publicly accessible on the internet
- Databases behind VPNs or private networks don't work (yet)
- Some firewall configurations may block Pulse's connection patterns
- Geographically distant servers might have connection issues

Workarounds:
- If database must be private, use the standard Prisma ORM (not Pulse)
- Ensure database is in a region with low latency to Prisma infrastructure
- Contact Prisma support if you have unique network constraints

Advanced notes

Pulse Architecture & Connectivity:

Prisma Pulse differs from standard Prisma ORM in how it connects to your database:

- Standard ORM: Runs from your application server → direct database connection
- Pulse: Runs from Prisma infrastructure → must reach your database over the internet

This means P6000 errors often indicate infrastructure compatibility issues rather than application bugs.

Debugging with Prisma Client logging:

Enable detailed logging to see exactly where the connection fails:

typescript
const prisma = new PrismaClient({
  log: [
    { emit: 'stdout', level: 'query' },
    { emit: 'stdout', level: 'info' },
    { emit: 'stdout', level: 'warn' },
    { emit: 'stdout', level: 'error' },
  ],
});

Pulse Status Page:

Check https://status.prisma.io for any ongoing Pulse service incidents that might cause widespread P6000 errors.

Database Provider Specific Notes:

- Supabase: Use the public hostname from project settings, not the internal one
- Railway: Enable public networking in service settings
- PlanetScale: Ensure the branch has public endpoint enabled
- Neon: Use the connection pooler URL if available for better stability
- AWS RDS: Enable "Public accessibility" in RDS settings (be careful with security groups)

Planning for Private Databases:

Prisma is developing static IP support for Pulse, which will allow private databases to whitelist specific Prisma IPs. Until then:
- Keep databases publicly accessible (properly firewalled)
- Or use standard Prisma ORM without Pulse features
- Monitor Prisma's roadmap for private network support

Frequently asked questions

What does "P6000" mean?
The P6000 error indicates that Prisma Pulse infrastructure cannot reach your database server at the configured hostname and port. Prisma Pulse provides real-time database subscriptions and change notifications, but requires stable network connectivity to your database. Unlike the standard Prisma ORM which can run on the same machine or local network, Pulse needs to connect from Prisma's infrastructure to your database over the internet.
How do I fix "P6000"?
This error occurs when Prisma Pulse cannot establish a connection to your database server, typically due to network issues, incorrect connection strings, firewall restrictions, or database unavailability. Resolving connectivity is essential for enabling real-time subscriptions.
What causes "P6000"?
Database is not publicly accessible or has firewall rules blocking Prisma Pulse IPs Incorrect DATABASE_URL connection string (wrong host, port, or credentials) Database server is down or not responding
Is the "P6000" error serious?
Yes. This is a critical-severity error that usually blocks work until it is fixed, but the steps above resolve it.

Official resources & further reading