Neon connection guide

Neon PostgreSQL Connection String

Copy a Neon Postgres connection string, decide whether to use the pooled hostname, and test SSL before wiring it into an app.

Use the connection value generated by Neon, keep it in an environment variable, and test it before changing application code. The URI shape below is a template, not a credential to paste unchanged.

URI scheme
postgresql://
Default PostgreSQL port
5432
Credential handling
Environment variable or secret manager
First test
psql "$DATABASE_URL" -c "select current_database(), current_user;"

Connection string template

postgresql://USER:PASSWORD@ep-example-123456.us-east-2.aws.neon.tech/neondb?sslmode=require

Replace every uppercase placeholder. Percent-encode reserved characters in URI usernames and passwords.

Environment variable

DATABASE_URL="postgresql://USER:PASSWORD@ep-example-pooler.us-east-2.aws.neon.tech/neondb?sslmode=require"

Where to get the Neon values

Use the Connect button on the Neon project dashboard, then choose a branch, database, and role. The generated string already includes the project hostname and SSL requirement.

The failure mode worth checking first

Neon has direct and pooled hostnames. The pooled hostname contains -pooler and is a good default for runtimes that open many short connections. Keep a direct URL available for tools or migrations that need session behavior.

Test the connection

Run a cheap read-only command before migrations or application startup. That separates network, TLS, and authentication errors from framework configuration problems.

Connection check

psql "$DATABASE_URL" -c "select current_database(), current_user;"

Open it in PostgresGUI

Paste the PostgreSQL URI into PostgresGUI or enter the same host, port, database, user, password, and SSL mode as separate fields. A desktop connection is useful for checking the visible schemas and role permissions before debugging the application layer.

Questions that come up

Should the connection string be committed to Git?

No. Commit an example with placeholders and load the real value from an environment variable or secret manager.

Why does a password with @ or # break the URI?

Those characters have meaning inside a URL. Percent-encode the username and password, or use a structured connection API instead of assembling a URL by hand.

Do I need sslmode=require?

Most hosted PostgreSQL services require TLS. For strict certificate and hostname verification, use sslmode=verify-full with the provider's trusted root certificate when the client supports it.

Keep going