AgentSkillsCN

Bun Use Prisma Postgres with Bun

在 Bun 中搭配 Prisma Postgres 使用

SKILL.md
--- frontmatter
name: Bun Use Prisma Postgres with Bun
description: Use Prisma Postgres with Bun

Use Prisma Postgres with Bun

<Note> **Note** — At the moment Prisma needs Node.js to be installed to run certain generation code. Make sure Node.js is installed in the environment where you're running `bunx prisma` commands. </Note> <Steps> <Step title="Create a new project"> First, create a directory and initialize it with `bun init`.
code
```bash terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}}
mkdir prisma-postgres-app
cd prisma-postgres-app
bun init
```
</Step> <Step title="Install Prisma dependencies"> Then install the Prisma CLI (`prisma`), Prisma Client (`@prisma/client`), and the accelerate extension as dependencies.
code
```bash terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}}
bun add -d prisma
bun add @prisma/client @prisma/extension-accelerate
```
</Step> <Step title="Initialize Prisma with PostgreSQL"> We'll use the Prisma CLI with `bunx` to initialize our schema and migration directory. We'll be using PostgreSQL as our database.
code
```bash terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}}
bunx --bun prisma init --db
```

This creates a basic schema. We need to update it to use the new Rust-free client with Bun optimization. Open `prisma/schema.prisma` and modify the generator block, then add a simple `User` model.

```prisma prisma/schema.prisma icon="https://mintcdn.com/bun-1dd33a4e/nIz6GtMH5K-dfXeV/icons/ecosystem/prisma.svg?fit=max&auto=format&n=nIz6GtMH5K-dfXeV&q=85&s=c37203455320f85a20a7b29ce374661c" theme={"theme":{"light":"github-light","dark":"dracula"}}
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="Configure database connection"> Set up your Postgres database URL in the `.env` file.
code
```ini .env icon="settings" theme={"theme":{"light":"github-light","dark":"dracula"}}
DATABASE_URL="postgresql://username:password@localhost:5432/mydb?schema=public"
```
</Step> <Step title="Create and run database migration"> Then generate and run initial migration.
code
This will generate a `.sql` migration file in `prisma/migrations`, and execute the migration against your Postgres database.

```bash terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}}
bunx --bun prisma migrate dev --name init
```

```txt  theme={"theme":{"light":"github-light","dark":"dracula"}}
Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
Datasource "db": PostgreSQL database "mydb", schema "public" at "localhost:5432"

Applying migration `20250114141233_init`

The following migration(s) have been created and applied from new schema changes:

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

Your database is now in sync with your schema.

✔ Generated Prisma Client (6.17.1) to ./generated in 18ms
```
</Step> <Step title="Generate Prisma Client"> As indicated in the output, Prisma re-generates our *Prisma client* whenever we execute a new migration. The client provides a fully typed API for reading and writing from our database. You can manually re-generate the client with the Prisma CLI.
code
```sh terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}}
bunx --bun prisma generate
```
</Step> <Step title="Initialize Prisma Client with Accelerate"> Now we need to create a Prisma client instance. Create a new file `prisma/db.ts` to initialize the PrismaClient with the Postgres adapter.
code
```ts prisma/db.ts icon="https://mintcdn.com/bun-1dd33a4e/nIz6GtMH5K-dfXeV/icons/typescript.svg?fit=max&auto=format&n=nIz6GtMH5K-dfXeV&q=85&s=5d73d76daf7eb7b158469d8c30d349b0" theme={"theme":{"light":"github-light","dark":"dracula"}}
import { PrismaClient } from "./generated/client";
import { withAccelerate } from '@prisma/extension-accelerate'

export const prisma = new PrismaClient().$extends(withAccelerate())
```
</Step> <Step title="Create a test script"> Let's write a simple script to create a new user, then count the number of users in the database.
code
```ts index.ts icon="https://mintcdn.com/bun-1dd33a4e/nIz6GtMH5K-dfXeV/icons/typescript.svg?fit=max&auto=format&n=nIz6GtMH5K-dfXeV&q=85&s=5d73d76daf7eb7b158469d8c30d349b0" theme={"theme":{"light":"github-light","dark":"dracula"}}
import { prisma } from "./prisma/db";

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

// count the number of users
const count = await prisma.user.count();
console.log(`There are ${count} users in the database.`);
```
</Step> <Step title="Run and test the application"> Let's run this script with `bun run`. Each time we run it, a new user is created.
code
```bash terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}}
bun run index.ts
```

```txt  theme={"theme":{"light":"github-light","dark":"dracula"}}
There are 1 users in the database.
```

```bash terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}}
bun run index.ts
```

```txt  theme={"theme":{"light":"github-light","dark":"dracula"}}
There are 2 users in the database.
```

```bash terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}}
bun run index.ts
```

```txt  theme={"theme":{"light":"github-light","dark":"dracula"}}
There are 3 users in the database.
```
</Step> </Steps>

That's it! Now that you've set up Prisma Postgres using Bun, we recommend referring to the official Prisma Postgres docs as you continue to develop your application.