Digital Ocean
Connect Hyperdrive to a Digital Ocean Postgres database instance.
This example shows you how to connect Hyperdrive to a Digital Ocean database instance.
1. Allow Hyperdrive access
Section titled “1. Allow Hyperdrive access”To allow Hyperdrive to connect to your database, you will need to ensure that Hyperdrive has valid user credentials and network access.
DigitalOcean Dashboard
Section titled “DigitalOcean Dashboard”- Go to the DigitalOcean dashboard and select the database you wish to connect to.
- Go to the Overview tab.
- Under the Connection Details panel, select Public network.
- On the dropdown menu, select Connection string > show-password.
- Copy the connection string.
With the connection string, you can now create a Hyperdrive database configuration.
2. Create a database configuration
Section titled “2. Create a 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_name
Most 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>"
3. Use Hyperdrive from your Worker
Section titled “3. Use Hyperdrive from your Worker”Install the Postgres.js driver:
npm install postgres
Create a new sql
instance and pass the Hyperdrive parameters:
import postgres from "postgres";
export interface Env { // If you set another name in the Wrangler configuration file as the value for 'binding', // replace "HYPERDRIVE" with the variable name you defined. HYPERDRIVE: Hyperdrive;}
export default { async fetch(request: Request, env: Env, ctx: ExecutionContext) { // NOTE: if `prepare: false` is passed when connecting, performance will // be slower but still correctly supported. const sql = postgres( env.HYPERDRIVE.connectionString, { // Workers limit the number of concurrent external connections, so be sure to limit // the size of the local connection pool that postgres.js may establish. max: 5,
// If you are using array types in your Postgres schema, it is necessary to fetch // type information to correctly de/serialize them. However, if you are not using // those, disabling this will save you an extra round-trip every time you connect. fetch_types: false, }, );
try { // A very simple test query const result = await sql`select * from pg_tables LIMIT 10`;
// 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({ result: result }); } catch (e) { console.log(e); return Response.json({ error: e.message }, { status: 500 }); } },} satisfies ExportedHandler<Env>;
Next steps
Section titled “Next steps”- 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