Subchapter 1.4
references/db-pull.mdMarkdown3 KBView on GitHub
Introspects an existing database and updates your Prisma schema to reflect its structure.
prisma db pull [options]schema.prisma with corresponding Prisma models| 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 |
prisma db pullprisma db pull --printOutputs schema to terminal for review.
prisma db pull --forceReplaces schema file, losing any manual customizations.
Configure database connection in prisma.config.ts:
import 'dotenv/config'
import { defineConfig, env } from 'prisma/config'
export default defineConfig({
schema: 'prisma/schema.prisma',
datasource: {
url: env('DATABASE_URL'),
},
})Initialize Prisma:
prisma initConfigure database URL
Pull schema:
prisma db pullReview and customize generated schema
Generate client:
prisma generateWhen database changes are made outside Prisma:
prisma db pull
prisma generateDatabase tables become Prisma models:
-- 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:
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])
}After db pull, consider:
Rename models to PascalCase:
model User { // Was: users
@@map("users")
}Rename fields to camelCase:
authorId Int? @map("author_id")Add relation names for clarity:
author User? @relation("PostAuthor", fields: [authorId], references: [id])Add documentation:
/// User account information
model User {
/// Primary email for authentication
email String @unique
}For MongoDB, db pull samples documents to infer schema:
prisma db pullMay require manual refinement since MongoDB is schemaless.
db pull overwrites your schema file. Always:
--print to preview first