prisma db pull
Introspects an existing database and updates your Prisma schema to reflect its structure.
Command
bash
prisma db pull [options]
What It Does
- •Connects to your database
- •Reads the database schema (tables, columns, relations, indexes)
- •Updates
schema.prismawith corresponding Prisma models - •For MongoDB, samples data to infer schema
Options
| Option | Description |
|---|---|
--force | Ignore current Prisma schema file |
--print | Print the introspected Prisma schema to stdout |
--schema | Custom path to your Prisma schema |
--config | Custom path to your Prisma config file |
--url | Override the datasource URL from the Prisma config file |
--composite-type-depth | Specify the depth for introspecting composite types (default: -1 for infinite, 0 = off) |
--schemas | Specify the database schemas to introspect |
--local-d1 | Generate a Prisma schema from a local Cloudflare D1 database |
Examples
Basic introspection
bash
prisma db pull
Preview without writing
bash
prisma db pull --print
Outputs schema to terminal for review.
Force overwrite
bash
prisma db pull --force
Replaces schema file, losing any manual customizations.
Prerequisites
Configure database connection in prisma.config.ts:
typescript
import 'dotenv/config'
import { defineConfig, env } from 'prisma/config'
export default defineConfig({
schema: 'prisma/schema.prisma',
datasource: {
url: env('DATABASE_URL'),
},
})
Workflow
Starting from existing database
- •
Initialize Prisma:
bashprisma init
- •
Configure database URL
- •
Pull schema:
bashprisma db pull
- •
Review and customize generated schema
- •
Generate client:
bashprisma generate
Syncing changes from database
When database changes are made outside Prisma:
bash
prisma db pull prisma generate
Generated Schema Example
Database tables become Prisma models:
sql
-- Database tables CREATE TABLE users ( id SERIAL PRIMARY KEY, email VARCHAR(255) UNIQUE NOT NULL, name VARCHAR(100) ); CREATE TABLE posts ( id SERIAL PRIMARY KEY, title VARCHAR(255) NOT NULL, author_id INTEGER REFERENCES users(id) );
Becomes:
prisma
model users {
id Int @id @default(autoincrement())
email String @unique @db.VarChar(255)
name String? @db.VarChar(100)
posts posts[]
}
model posts {
id Int @id @default(autoincrement())
title String @db.VarChar(255)
author_id Int?
users users? @relation(fields: [author_id], references: [id])
}
Post-Introspection Cleanup
After db pull, consider:
- •
Rename models to PascalCase:
prismamodel User { // Was: users @@map("users") } - •
Rename fields to camelCase:
prismaauthorId Int? @map("author_id") - •
Add relation names for clarity:
prismaauthor User? @relation("PostAuthor", fields: [authorId], references: [id]) - •
Add documentation:
prisma/// User account information model User { /// Primary email for authentication email String @unique }
MongoDB Introspection
For MongoDB, db pull samples documents to infer schema:
bash
prisma db pull
May require manual refinement since MongoDB is schemaless.
Warning
db pull overwrites your schema file. Always:
- •Commit current schema before pulling
- •Use
--printto preview first - •Backup customizations you want to keep