> ## Documentation Index
> Fetch the complete documentation index at: https://bun.ll1025.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 使用 Prisma Postgres 与 Bun

<Note>
  Prisma 需要 Node.js 来运行某些生成代码，因此请确保在运行 `bunx prisma` 命令的环境中已安装 Node.js。
</Note>

<Steps>
  <Step title="创建新项目">
    首先，创建一个目录并使用 `bun init` 初始化。

    ```bash terminal icon="terminal" theme={null}
    mkdir prisma-postgres-app
    cd prisma-postgres-app
    bun init
    ```
  </Step>

  <Step title="安装 Prisma 依赖">
    然后安装 Prisma CLI（`prisma`）、Prisma Client（`@prisma/client`）和加速扩展作为依赖。

    ```bash terminal icon="terminal" theme={null}
    bun add -d prisma
    bun add @prisma/client @prisma/extension-accelerate
    ```
  </Step>

  <Step title="使用 PostgreSQL 初始化 Prisma">
    使用 `bunx` 运行 Prisma CLI 来初始化模式和迁移目录，数据库使用 PostgreSQL。

    ```bash terminal icon="terminal" theme={null}
    bunx --bun prisma init --db
    ```

    这会创建一个基础模式。更新它以使用针对 Bun 优化的无 Rust 客户端：打开 `prisma/schema.prisma` 并修改 generator 块，然后添加一个 `User` 模型。

    ```prisma prisma/schema.prisma icon="https://mintcdn.com/span-inc/82N53aP7NFbaCVSl/icons/ecosystem/prisma.svg?fit=max&auto=format&n=82N53aP7NFbaCVSl&q=85&s=28e21d4d78cff215328895cecd8c98b3" theme={null}
    generator client {
    	provider = "prisma-client"
    	output = "./generated" // [!code ++]
    	engineType = "client" // [!code ++]
    	runtime = "bun" // [!code ++]
    }

    datasource db {
    	provider = "postgresql"
    	url      = env("DATABASE_URL")
    }

    model User { // [!code ++]
    	id    Int     @id @default(autoincrement()) // [!code ++]
    	email String  @unique // [!code ++]
    	name  String? // [!code ++]
    } // [!code ++]
    ```
  </Step>

  <Step title="配置数据库连接">
    在 `.env` 文件中设置你的 Postgres 数据库 URL。

    ```ini .env icon="settings" theme={null}
    DATABASE_URL="postgresql://username:password@localhost:5432/mydb?schema=public"
    ```
  </Step>

  <Step title="创建并运行数据库迁移">
    然后生成并运行初始迁移。

    该命令会将一个 `.sql` 迁移文件写入 `prisma/migrations` 并针对你的 Postgres 数据库执行。

    ```bash terminal icon="terminal" theme={null}
    bunx --bun prisma migrate dev --name init
    ```

    ```txt theme={null}
    环境变量已从 .env 加载
    已从 prisma/schema.prisma 加载 Prisma 模式
    数据源 "db"：PostgreSQL 数据库 "mydb"，模式 "public" 位于 "localhost:5432"

    正在应用迁移 `20250114141233_init`

    以下迁移已根据新的模式更改创建并应用：

    prisma/migrations/
      └─ 20250114141233_init/
        └─ migration.sql

    你的数据库现已与模式同步。

    ✔ 已生成 Prisma Client (6.17.1) 到 ./generated，用时 18ms
    ```
  </Step>

  <Step title="生成 Prisma Client">
    如输出所示，Prisma 会在你运行新的迁移时重新生成 *Prisma client*。客户端提供了用于读写数据库的完全类型化 API。要手动重新生成客户端，请使用 Prisma CLI。

    ```sh terminal icon="terminal" theme={null}
    bunx --bun prisma generate
    ```
  </Step>

  <Step title="使用加速功能初始化 Prisma Client">
    创建一个新文件 `prisma/db.ts`，使用 Postgres 适配器初始化 PrismaClient。

    ```ts prisma/db.ts icon="https://mintcdn.com/span-inc/82N53aP7NFbaCVSl/icons/typescript.svg?fit=max&auto=format&n=82N53aP7NFbaCVSl&q=85&s=787d39d6a7d96d7f9540dc74344eba23" theme={null}
    import { PrismaClient } from "./generated/client";
    import { withAccelerate } from '@prisma/extension-accelerate'

    export const prisma = new PrismaClient().$extends(withAccelerate())
    ```
  </Step>

  <Step title="创建测试脚本">
    编写一个创建新用户并统计数据库中用户数量的脚本。

    ```ts index.ts icon="https://mintcdn.com/span-inc/82N53aP7NFbaCVSl/icons/typescript.svg?fit=max&auto=format&n=82N53aP7NFbaCVSl&q=85&s=787d39d6a7d96d7f9540dc74344eba23" theme={null}
    import { prisma } from "./prisma/db";

    // 创建新用户
    await prisma.user.create({
      data: {
        name: "John Dough",
        email: `john-${Math.random()}@example.com`,
      },
    });

    // 统计用户数量
    const count = await prisma.user.count();
    console.log(`数据库中有 ${count} 个用户。`);
    ```
  </Step>

  <Step title="运行并测试应用程序">
    使用 `bun run` 运行脚本。每次运行都会创建一个新用户。

    ```bash terminal icon="terminal" theme={null}
    bun run index.ts
    ```

    ```txt theme={null}
    数据库中有 1 个用户。
    ```

    ```bash terminal icon="terminal" theme={null}
    bun run index.ts
    ```

    ```txt theme={null}
    数据库中有 2 个用户。
    ```

    ```bash terminal icon="terminal" theme={null}
    bun run index.ts
    ```

    ```txt theme={null}
    数据库中有 3 个用户。
    ```
  </Step>
</Steps>

***

Prisma Postgres 现已与 Bun 一起设置完成。在继续开发你的应用程序时，请参考[官方 Prisma Postgres 文档](https://www.prisma.io/docs/postgres)。
