Skip to content
Cloudflare Docs

PlanetScale

Connect Hyperdrive to a PlanetScale PostgreSQL database.

This example shows you how to connect Hyperdrive to a PlanetScale PostgreSQL database.

1. Allow Hyperdrive access

You can connect Hyperdrive to any existing PlanetScale PostgreSQL database by creating a new role (optional) and retrieving a connection string to your database.

PlanetScale Dashboard

  1. Go to the PlanetScale dashboard and select the database you wish to connect to.
  2. Click Connect.
  3. Create a new role for your Hyperdrive configuration (recommended):
    1. Ensure the minimum required permissions for Hyperdrive to read and write data to your tables:
      • pg_read_all_data: Read data from all tables, views, and sequences
      • pg_write_all_data: Write data to all tables, views, and sequences
    2. Click Create role.
  4. Note the user, the password, the database host, and the database name (or postgres as the default database). You will need these to create a database configuration in Hyperdrive.

With the host, database name, username and password, you can now create a Hyperdrive database configuration.

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 Cloudflare dashboard:

  1. In the Cloudflare dashboard, go to the Hyperdrive page.

    Go to Hyperdrive
  2. Select Create Configuration.

  3. Fill out the form, including the connection string.

  4. Select Create.

3. Use Hyperdrive from your Worker

Install the node-postgres driver:

Terminal window
npm i pg@>8.16.3

If using TypeScript, install the types package:

Terminal window
npm i -D @types/pg

Add 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>"
}
]
}

Create a new Client instance and pass the Hyperdrive connectionString:

// filepath: src/index.ts
import { Client } from "pg";
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
// Create a new client instance for each request.
const client = new Client({
connectionString: env.HYPERDRIVE.connectionString,
});
try {
// Connect to the database
await client.connect();
console.log("Connected to PostgreSQL database");
// Perform a simple query
const result = await client.query("SELECT * FROM pg_tables");
// Clean up the client after the response is returned, before the Worker is killed
ctx.waitUntil(client.end());
return Response.json({
success: true,
result: result.rows,
});
} catch (error: any) {
console.error("Database error:", error.message);
new Response('Internal error occurred', { status: 500 });
}
},
};

Next steps