Base app architecture:
Route groups for customer, staff and owner.
* Reusable design system with around 20 UI components.
* Complete Prisma schema.
* Authentication with email/password and Google.
* Role and permission model.
* Protected routes.
* Clean separation between features, services, components and shared utilities.
3.5 KiB
3.5 KiB
prisma db pull
Introspects an existing database and updates your Prisma schema to reflect its structure.
Command
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
prisma db pull
Preview without writing
prisma db pull --print
Outputs schema to terminal for review.
Force overwrite
prisma db pull --force
Replaces schema file, losing any manual customizations.
Prerequisites
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'),
},
})
Workflow
Starting from existing database
-
Initialize Prisma:
prisma init -
Configure database URL
-
Pull schema:
prisma db pull -
Review and customize generated schema
-
Generate client:
prisma generate
Syncing changes from database
When database changes are made outside Prisma:
prisma db pull
prisma generate
Generated Schema Example
Database 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])
}
Post-Introspection Cleanup
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 }
MongoDB Introspection
For MongoDB, db pull samples documents to infer schema:
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