Neon
Connect Hyperdrive to a Neon Postgres database.
This example shows you how to connect Hyperdrive to a Neon ↗ Postgres database.
You can connect Hyperdrive to any existing Neon database by creating a new user and fetching your database connection string.
- Go to the Neon dashboard ↗ and select the project (database) you wish to connect to.
- Select Roles from the sidebar and select New Role. Enter
hyperdrive-useras the name (or your preferred name) and copy the password. Note that the password will not be displayed again: you will have to reset it if you do not save it somewhere. - Select Dashboard from the sidebar > go to the Connection Details pane > ensure you have selected the branch, database and role (for example,
hyperdrive-user) that Hyperdrive will connect through. - Select the
psqland uncheck the connection pooling checkbox. Note down the connection string (starting withpostgres://hyperdrive-user@...) from the text box.
With both the connection string and the password, you can now create a Hyperdrive database configuration.
To configure Hyperdrive, you will need:
- The IP address (or hostname) and port of your database.
- The database username (for example,
hyperdrive-demo) you configured in a previous step. - The password associated with that username.
- The name of the database you want Hyperdrive to connect to. For example,
postgres.
Hyperdrive accepts the combination of these parameters in the common connection string format used by database drivers:
postgres://USERNAME:PASSWORD@HOSTNAME_OR_IP_ADDRESS:PORT/database_nameMost database providers will provide a connection string you can directly copy-and-paste directly into Hyperdrive.
To create a Hyperdrive configuration with the Wrangler CLI, open your terminal and run the following command. Replace <NAME_OF_HYPERDRIVE_CONFIG> with a name for your Hyperdrive configuration and paste the connection string provided from your database host, or replace user, password, HOSTNAME_OR_IP_ADDRESS, port, and database_name placeholders with those specific to your database:
npx wrangler hyperdrive create <NAME_OF_HYPERDRIVE_CONFIG> --connection-string="postgres://user:password@HOSTNAME_OR_IP_ADDRESS:PORT/database_name"This command outputs a binding for the Wrangler configuration file:
{ "name": "hyperdrive-example", "main": "src/index.ts", "compatibility_date": "2024-08-21", "compatibility_flags": [ "nodejs_compat" ], "hyperdrive": [ { "binding": "HYPERDRIVE", "id": "<ID OF THE CREATED HYPERDRIVE CONFIGURATION>" } ]}name = "hyperdrive-example"main = "src/index.ts"compatibility_date = "2024-08-21"compatibility_flags = ["nodejs_compat"]
# Pasted from the output of `wrangler hyperdrive create <NAME_OF_HYPERDRIVE_CONFIG> --connection-string=[...]` above.[[hyperdrive]]binding = "HYPERDRIVE"id = "<ID OF THE CREATED HYPERDRIVE CONFIGURATION>"Install Postgres.js ↗:
# Postgres.js 3.4.5 or later is recommendednpm install postgresAdd the required Node.js compatibility flags and Hyperdrive binding to your wrangler.jsonc file:
{ "compatibility_flags": [ "nodejs_compat" ], "compatibility_date": "2024-09-23", "hyperdrive": [ { "binding": "HYPERDRIVE", "id": "<your-hyperdrive-id-here>" } ]}# required for database drivers to functioncompatibility_flags = ["nodejs_compat"]compatibility_date = "2024-09-23"
[[hyperdrive]]binding = "HYPERDRIVE"id = "<your-hyperdrive-id-here>"Create a Worker that connects to your PostgreSQL database via Hyperdrive:
// filepath: src/index.tsimport postgres from "postgres";
export default { async fetch( request: Request, env: Env, ctx: ExecutionContext, ): Promise<Response> { // Create a database client that connects to your database via Hyperdrive // using the Hyperdrive credentials const sql = postgres(env.HYPERDRIVE.connectionString, { // Limit the connections for the Worker request to 5 due to Workers' limits on concurrent external connections max: 5, // If you are not using array types in your Postgres schema, disable `fetch_types` to avoid an additional round-trip (unnecessary latency) fetch_types: false, });
try { // A very simple test query const result = await sql`select * from pg_tables`;
// Clean up the client, ensuring we don't kill the worker before that is // completed. ctx.waitUntil(sql.end());
// Return result rows as JSON return Response.json({ success: true, result: result }); } catch (e: any) { console.error("Database error:", e.message);
return Response.error(); } },} satisfies ExportedHandler<Env>;- Learn more about How Hyperdrive Works.
- Refer to the troubleshooting guide to debug common issues.
- Understand more about other storage options available to Cloudflare Workers.
Was this helpful?
- Resources
- API
- New to Cloudflare?
- Products
- Sponsorships
- Open Source
- Support
- Help Center
- System Status
- Compliance
- GDPR
- Company
- cloudflare.com
- Our team
- Careers
- 2025 Cloudflare, Inc.
- Privacy Policy
- Terms of Use
- Report Security Issues
- Trademark