Introduction

OverviewPhilosophyStructureUpdatesFAQ

Usage

Other

Switch to Prisma Postgres

How to change the database provider to Prisma Postgres.

Here's how to switch from Neon to Prisma Postgres — a serverless database with zero cold starts and a generous free tier. You can learn more about its architecture that enables this here.

1. Create a new Prisma Postgres instance

Start by creating a new Prisma Postgres instance via the Prisma Data Platform and get your connection string. It will look something like this:

prisma+postgres://accelerate.prisma-data.net/?api_key=ey....

2. Update your environment variables

Update your environment variables to use the new Prisma Postgres connection string:

apps/database/.env
DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=ey...."

3. Swap out the required dependencies in @repo/database

Uninstall the existing dependencies...

npm uninstall @neondatabase/serverless @prisma/adapter-neon ws @types/ws

... and install the new dependencies:

npm install @prisma/extension-accelerate

4. Update the database connection code

Update the database connection code to use the new Prisma Postgres adapter:

packages/database/index.ts {4,7}
import 'server-only';

import { env } from '@repo/env';
import { withAccelerate } from '@prisma/extension-accelerate';
import { PrismaClient } from '@prisma/client';

export const database = new PrismaClient().$extends(withAccelerate());

Your project is now configured to use your Prisma Postgres instance for migrations and queries.

5. Explore caching and real-time database events

Note that thanks to the first-class integration of other Prisma products, Prisma Postgres comes with additional features out-of-the-box that you may find useful:

Caching

To cache a query with Prisma Client, you can add the swr and ttl options to any given query, for example:

page.tsx
const pages = await prisma.page.findMany({
  cacheStrategy: {
    swr: 60, // 60 seconds
    ttl: 60, // 60 seconds
  },
});

Learn more in the Accelerate documentation.

Real-time database events

Prisma Pulse (@prisma/extension-pulse) has been paused and may be deprecated. Check the Prisma Pulse documentation for the latest status before proceeding.

To stream database change events from your database, you first need to install the Pulse extension:

npm install @prisma/extension-pulse

Next, you need to add your Pulse API key as an environment variable:

apps/database/.env
PULSE_API_KEY="ey...."

You can find your Pulse API key in your Prisma Postgres connection string, it's the value of the api_key argument and starts with ey.... Alternatively, you can find the API key in your Prisma Postgres Dashboard.

Then, update the env package to include the new PULSE_API_KEY environment variable:

packages/env/index.ts {3,11}
export const server = {
  // ...
  PULSE_API_KEY: z.string().min(1).startsWith('ey'),
};

export const env = createEnv({
  client,
  server,
  runtimeEnv: {
    // ...
    PULSE_API_KEY: process.env.PULSE_API_KEY,
  },
});

Finally, update the database connection code to include the Pulse extension:

packages/database/index.ts {2, 7-9}
import 'server-only';
import { withPulse } from '@prisma/extension-pulse';
import { withAccelerate } from '@prisma/extension-accelerate';
import { PrismaClient } from '@prisma/client';
import { env } from '@repo/env';

export const database = new PrismaClient()
  .$extends(withAccelerate())
  .$extends(withPulse({ apiKey: env.PULSE_API_KEY })) ;

You can now stream any change events from your database using the following code:

page.tsx
const stream = await prisma.page.stream();

console.log(`Waiting for an event on the \`Page\` table ... `);

for await (const event of stream) {
  console.log('Received an event:', event);
}

Learn more in the Pulse documentation.