Skip to content
Home / Migrations / Prisma + PlanetScaleDrizzle ORM + Neon

Prisma + PlanetScale Drizzle ORM + Neon

medium

PlanetScale killed its free tier, prompting many to move to Neon (serverless Postgres). Drizzle is lighter than Prisma and Neon-native with HTTP driver support for edge environments.

Estimated: 6-12h · 6 steps
Progress0%
Step 1: Set up Neon project

Create project at neon.tech. Get connection string. Neon supports branching for dev/staging — create a dev branch.

npm install drizzle-orm @neondatabase/serverless && npm install -D drizzle-kit
Step 2: Write Drizzle schema

Translate Prisma schema to Drizzle table definitions.

import { pgTable, serial, text, timestamp } from 'drizzle-orm/pg-core'
export const users = pgTable('users', { id: serial('id').primaryKey(), email: text('email').notNull().unique() })
Step 3: Set up Drizzle config
// drizzle.config.ts
export default { schema: './src/db/schema.ts', out: './drizzle', dialect: 'postgresql', dbCredentials: { url: process.env.DATABASE_URL! } }
Step 4: Generate and apply migrations
npx drizzle-kit generate && npx drizzle-kit migrate
Step 5: Replace Prisma client with Drizzle

prisma.user.findMany() → db.select().from(users). prisma.user.create() → db.insert(users).values({}).

import { neon } from '@neondatabase/serverless'
import { drizzle } from 'drizzle-orm/neon-http'
const sql = neon(process.env.DATABASE_URL!)
export const db = drizzle(sql)
Step 6: Migrate data from PlanetScale

mysqldump from PlanetScale, pgloader to convert MySQL → PostgreSQL, then load into Neon.

All data present, queries return correct results