Prisma + PlanetScale → Drizzle ORM + Neon
mediumPlanetScale 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