Driver Adapters
These examples apply to Prisma ORM 7 SQL clients during a 6-to-7 upgrade. They do not configure Prisma 8; use the installed package-owned prisma-8 runtime guidance for that version.
MongoDB should not follow this path. There is no published MongoDB @prisma/adapter-* package, and MongoDB projects should remain on the latest Prisma 6.x release instead of trying to fit into the Prisma 7 SQL adapter model.
Why Driver Adapters?
- No native engine binary in the Prisma Client SQL path
- Smaller bundle size
- Better serverless/edge compatibility
- Uses native Node.js database drivers
- More control over connection pooling
Available Adapters
| Database | Adapter Package | Underlying Driver |
|---|---|---|
| PostgreSQL | @prisma/adapter-pg |
pg |
| MySQL / MariaDB | @prisma/adapter-mariadb |
mariadb |
| SQLite | @prisma/adapter-better-sqlite3 |
better-sqlite3 |
| Prisma Postgres (Node.js) | @prisma/adapter-pg |
pg |
| Prisma Postgres (edge/serverless) | @prisma/adapter-ppg |
@prisma/ppg |
| SQL Server | @prisma/adapter-mssql |
mssql |
| Neon | @prisma/adapter-neon |
@neondatabase/serverless |
| PlanetScale | @prisma/adapter-planetscale |
@planetscale/database |
| Turso/libSQL | @prisma/adapter-libsql |
@libsql/client |
| D1 (Cloudflare) | @prisma/adapter-d1 |
Cloudflare D1 |
Installation
PostgreSQL
npm install @prisma/adapter-pgMySQL
npm install @prisma/adapter-mariadb mariadbSQLite
npm install @prisma/adapter-better-sqlite3Prisma Postgres
npm install @prisma/adapter-pg pgSQL Server
npm install @prisma/adapter-mssql mssqlConfiguration
PostgreSQL
import { PrismaClient } from '../generated/client'
import { PrismaPg } from '@prisma/adapter-pg'
const adapter = new PrismaPg({
connectionString: process.env.DATABASE_URL
})
const prisma = new PrismaClient({ adapter })MySQL
import { PrismaClient } from '../generated/client'
import { PrismaMariaDb } from '@prisma/adapter-mariadb'
const adapter = new PrismaMariaDb({
host: 'localhost',
port: 3306,
connectionLimit: 5,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASSWORD,
database: process.env.MYSQL_DATABASE,
})
const prisma = new PrismaClient({ adapter })SQLite
import { PrismaClient } from '../generated/client'
import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3'
const adapter = new PrismaBetterSqlite3({
url: process.env.DATABASE_URL || 'file:./dev.db'
})
const prisma = new PrismaClient({ adapter })Neon (Serverless PostgreSQL)
import { PrismaClient } from '../generated/client'
import { PrismaNeon } from '@prisma/adapter-neon'
const adapter = new PrismaNeon({
connectionString: process.env.DATABASE_URL
})
const prisma = new PrismaClient({ adapter })Prisma Postgres
import { PrismaClient } from '../generated/client'
import { PrismaPg } from '@prisma/adapter-pg'
const adapter = new PrismaPg({
connectionString: process.env.DATABASE_URL,
})
const prisma = new PrismaClient({ adapter })Prisma Postgres serverless driver
import { PrismaClient } from '../generated/client'
import { PrismaPostgresAdapter } from '@prisma/adapter-ppg'
const prisma = new PrismaClient({
adapter: new PrismaPostgresAdapter({
connectionString: process.env.PRISMA_DIRECT_TCP_URL,
}),
})SQL Server
import { PrismaClient } from '../generated/client'
import { PrismaMssql } from '@prisma/adapter-mssql'
const adapter = new PrismaMssql({
server: 'localhost',
port: 1433,
database: 'mydb',
user: process.env.SQLSERVER_USER,
password: process.env.SQLSERVER_PASSWORD,
options: {
encrypt: true,
trustServerCertificate: true,
},
})
const prisma = new PrismaClient({ adapter })Connection Pool Configuration
Driver adapters use the underlying driver's pool settings, which differ from v6 defaults.
PostgreSQL with custom pool
import { PrismaPg } from '@prisma/adapter-pg'
const adapter = new PrismaPg({
connectionString: process.env.DATABASE_URL,
// Pool configuration
max: 10, // Maximum connections
idleTimeoutMillis: 30000, // Close idle connections after 30s
connectionTimeoutMillis: 5000, // Connection timeout (v6 default was 5s)
})Matching v6 behavior
const adapter = new PrismaPg({
connectionString: process.env.DATABASE_URL,
connectionTimeoutMillis: 5000, // v6 used 5 second timeout
})SSL Configuration
Accept self-signed certificates
const adapter = new PrismaPg({
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false // Accept self-signed certs
}
})Proper SSL configuration
const adapter = new PrismaPg({
connectionString: process.env.DATABASE_URL,
ssl: {
ca: fs.readFileSync('/path/to/ca-cert.pem'),
rejectUnauthorized: true
}
})Migration from v6
Before (v6)
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient({
datasources: {
db: { url: process.env.DATABASE_URL }
}
})After (v7)
import { PrismaClient } from '../generated/client'
import { PrismaPg } from '@prisma/adapter-pg'
const adapter = new PrismaPg({
connectionString: process.env.DATABASE_URL
})
const prisma = new PrismaClient({ adapter })Singleton Pattern
// lib/prisma.ts
import { PrismaClient } from '../generated/client'
import { PrismaPg } from '@prisma/adapter-pg'
const globalForPrisma = globalThis as unknown as {
prisma: PrismaClient | undefined
}
const adapter = new PrismaPg({
connectionString: process.env.DATABASE_URL!
})
export const prisma = globalForPrisma.prisma ?? new PrismaClient({ adapter })
if (process.env.NODE_ENV !== 'production') {
globalForPrisma.prisma = prisma
}