データベースのシードとコネクションプーリング
信頼できるシードデータをデータベースに投入し、Prismaのコネクションプーリングを設定して、負荷がかかってもNext.jsアプリの高速性と安定性を保ちます。
「データベースのシードとコネクションプーリング」はCoddyKit上の無料Next.js 15 Fullstack (App Router + Server Actions)レッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはNext.js 15 Fullstack (App Router + Server Actions)学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Next.js 15 Fullstack (App Router + Server Actions)コースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
Why Seed a Database?
Seeding fills your database with predictable starter data: admin users, demo records, lookup tables. It lets every developer and every CI run start from the same known state.
Without seeds, manual data entry makes tests flaky and onboarding slow.
The Prisma Seed Script
Prisma runs a seed file you point it at. Create prisma/seed.ts and register it in package.json under the prisma.seed key so prisma db seed knows what to execute.
{
"prisma": {
"seed": "ts-node prisma/seed.ts"
}
}Writing Seed Logic
Inside the seed file you instantiate the client and create records. Wrap it in an async function and disconnect when finished.
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
await prisma.user.create({
data: { email: 'admin@app.com', name: 'Admin' }
});
}
main().finally(() => prisma.$disconnect());Idempotent Seeds with upsert
Running a seed twice should not create duplicates. Use upsert so a record is created if missing and updated if it already exists.
await prisma.user.upsert({
where: { email: 'admin@app.com' },
update: {},
create: { email: 'admin@app.com', name: 'Admin' }
});Bulk Seeding
To insert many rows efficiently, use createMany. The skipDuplicates option avoids errors on unique conflicts.
await prisma.tag.createMany({
data: [
{ name: 'news' },
{ name: 'sports' },
{ name: 'tech' }
],
skipDuplicates: true
});Running the Seed
Trigger the script from the CLI. Prisma also runs it automatically after prisma migrate reset, giving you a clean reseeded database.
npx prisma db seedThe Connection Problem in Serverless
Next.js on Vercel runs serverless functions. Each invocation can open a fresh DB connection, and under load you quickly exhaust the database connection limit.
Connection pooling solves this by reusing a fixed set of connections.
Reusing the Prisma Client
In development, hot reload can spawn many clients. Store a single instance on globalThis so only one client exists per process.
import { PrismaClient } from '@prisma/client';
const g = globalThis as unknown as { prisma?: PrismaClient };
export const prisma = g.prisma ?? new PrismaClient();
if (process.env.NODE_ENV !== 'production') g.prisma = prisma;Pooling with a Connection URL
Use a pooler such as PgBouncer or Prisma Accelerate. Point your DATABASE_URL at the pooled endpoint and add ?pgbouncer=true so Prisma disables prepared statements that PgBouncer cannot share.
DATABASE_URL="postgresql://user:pass@host:6543/db?pgbouncer=true&connection_limit=1"Direct URL for Migrations
Pooled connections cannot run migrations. Add a directUrl in your schema that bypasses the pooler so prisma migrate works.
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_URL")
}Best Practices
Keep your data layer healthy:
- Make seeds idempotent with upsert
- Reuse a single client instance
- Use a pooler in serverless environments
- Keep a separate direct URL for migrations
Quick Check
Test what you learned about pooling.
Recap
You learned to seed and pool your database:
- Configure
prisma.seedand write idempotent seeds withupsert - Bulk insert with
createMany - Reuse a single Prisma client to avoid leaks
- Use a pooled
DATABASE_URLplus adirectUrlfor migrations
Now your database starts in a known state and scales safely.
よくある質問
「データベースのシードとコネクションプーリング」レッスンは無料ですか?
はい。「データベースのシードとコネクションプーリング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Next.js 15 Fullstack (App Router + Server Actions)コースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Next.js 15 Fullstack (App Router + Server Actions)コースには全4レッスンが含まれています。
「データベースのシードとコネクションプーリング」で何を学びますか?
信頼できるシードデータをデータベースに投入し、Prismaのコネクションプーリングを設定して、負荷がかかってもNext.jsアプリの高速性と安定性を保ちます。 ブラウザで直接実行するハンズオンコードでNext.js 15 Fullstack (App Router + Server Actions)を演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Next.js 15 Fullstack (App Router + Server Actions)を始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのNext.js 15 Fullstack (App Router + Server Actions)は初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「データベースのシードとコネクションプーリング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このNext.js 15 Fullstack (App Router + Server Actions)レッスンでコードを書いて実行できますか?
はい。すべてのNext.js 15 Fullstack (App Router + Server Actions)レッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Prisma ORMのセットアップ
- Server ActionsによるCRUD
- データベーススキーマのマイグレーション
- データベースのシードとコネクションプーリング