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:
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-accelerate4. Update the database connection code
Update the database connection code to use the new Prisma Postgres adapter:
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:
- Prisma Accelerate: Enables connection pooling and global caching
- Prisma Pulse: Enables real-time streaming of database events
Caching
To cache a query with Prisma Client, you can add the swr and ttl options to any given query, for example:
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-pulseNext, you need to add your Pulse API key as an environment variable:
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:
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:
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:
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.