165 lines
5.0 KiB
Plaintext
165 lines
5.0 KiB
Plaintext
---
|
|
title: Use Prisma Postgres with Bun
|
|
sidebarTitle: Prisma Postgres with Bun
|
|
mode: center
|
|
---
|
|
|
|
<Steps>
|
|
<Step title="Create a new project">
|
|
First, create a directory and initialize it with `bun init`.
|
|
|
|
```bash terminal icon="terminal"
|
|
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 Postgres driver adapter (`@prisma/adapter-pg`) as dependencies.
|
|
|
|
```bash terminal icon="terminal"
|
|
bun add -d prisma
|
|
bun add @prisma/client @prisma/adapter-pg
|
|
```
|
|
</Step>
|
|
|
|
<Step title="Initialize Prisma with PostgreSQL">
|
|
Use the Prisma CLI with `bunx` to initialize the schema and migration directory, with PostgreSQL as the database.
|
|
|
|
```bash terminal icon="terminal"
|
|
bunx --bun prisma init --db
|
|
```
|
|
|
|
This creates a basic schema. Update it to use the Rust-free client optimized for Bun: open `prisma/schema.prisma` and modify the generator block, then add a `User` model.
|
|
|
|
```prisma prisma/schema.prisma icon="/icons/ecosystem/prisma.svg"
|
|
generator client {
|
|
provider = "prisma-client"
|
|
output = "../generated/prisma" // [!code --]
|
|
output = "./generated" // [!code ++]
|
|
engineType = "client" // [!code ++]
|
|
runtime = "bun" // [!code ++]
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
}
|
|
|
|
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.
|
|
|
|
```ini .env icon="settings"
|
|
DATABASE_URL="postgresql://username:password@localhost:5432/mydb?schema=public"
|
|
```
|
|
</Step>
|
|
|
|
<Step title="Create and run database migration">
|
|
Then generate and run the initial migration.
|
|
|
|
The command writes a `.sql` migration file to `prisma/migrations` and executes it against your Postgres database. Bun [does not load `.env` automatically](/runtime/environment-variables) when it runs a CLI with `--bun`. The `prisma.config.ts` generated by `prisma init` reads `DATABASE_URL` from the environment, so pass `--env-file=.env` explicitly.
|
|
|
|
```bash terminal icon="terminal"
|
|
bun run --bun --env-file=.env prisma migrate dev --name init
|
|
```
|
|
|
|
```txt
|
|
Loaded Prisma config from prisma.config.ts.
|
|
|
|
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.
|
|
```
|
|
</Step>
|
|
|
|
<Step title="Generate Prisma Client">
|
|
`prisma migrate dev` does not generate the _Prisma client_, so generate it with the Prisma CLI. The client provides a fully typed API for reading and writing to the database.
|
|
|
|
```sh terminal icon="terminal"
|
|
bun run --bun --env-file=.env prisma generate
|
|
```
|
|
</Step>
|
|
|
|
<Step title="Initialize Prisma Client with the Postgres adapter">
|
|
Create a new file `prisma/db.ts` that initializes the PrismaClient with the Postgres adapter.
|
|
|
|
```ts prisma/db.ts icon="/icons/typescript.svg"
|
|
import { PrismaClient } from "./generated/client";
|
|
import { PrismaPg } from "@prisma/adapter-pg";
|
|
|
|
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL! });
|
|
export const prisma = new PrismaClient({ adapter });
|
|
```
|
|
</Step>
|
|
|
|
<Step title="Create a test script">
|
|
Write a script that creates a new user, then counts the users in the database.
|
|
|
|
```ts index.ts icon="/icons/typescript.svg"
|
|
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">
|
|
Run the script with `bun run`. Each run creates a new user.
|
|
|
|
```bash terminal icon="terminal"
|
|
bun run index.ts
|
|
```
|
|
|
|
```txt
|
|
There are 1 users in the database.
|
|
```
|
|
|
|
```bash terminal icon="terminal"
|
|
bun run index.ts
|
|
```
|
|
|
|
```txt
|
|
There are 2 users in the database.
|
|
```
|
|
|
|
```bash terminal icon="terminal"
|
|
bun run index.ts
|
|
```
|
|
|
|
```txt
|
|
There are 3 users in the database.
|
|
```
|
|
</Step>
|
|
|
|
</Steps>
|
|
|
|
---
|
|
|
|
Prisma Postgres is now set up with Bun. Refer to the [official Prisma Postgres docs](https://www.prisma.io/docs/postgres) as you continue to develop your application.
|