db
Alasan ada: mode fullstack butuh database dengan skema bertipe dan migrasi yang bisa diulang, tanpa merakit Drizzle, Postgres, dan skrip migrasi dari nol.
Mode: fullstack.
npm create nextjs-kit@latest my-app -- --mode fullstack --modules dbcp .env.example .env.localnpm run db:up # nyalakan Postgres lewat Docker Composenpm run db:migrate # terapkan migrasi di folder drizzle/npm run dev| Skrip | Fungsi |
|---|---|
npm run db:up |
docker compose up -d --wait (menunggu sampai sehat) |
npm run db:down |
Matikan Postgres (data tetap di volume) |
npm run db:generate |
Buat migrasi SQL baru dari perubahan schema.ts |
npm run db:migrate |
Terapkan migrasi yang belum dijalankan |
npm run db:studio |
Buka Drizzle Studio |
Mengubah skema
Section titled “Mengubah skema”- Edit
src/server/db/schema.ts. npm run db:generatemembuat berkas SQL baru didrizzle/.npm run db:migratemenerapkannya.- Commit folder
drizzle/bersama perubahan skema.
Memakai database
Section titled “Memakai database”import { db, schema } from "@/server/db";
const rows = await db.select().from(schema.todos);Modul ini hanya untuk server (import "server-only"). Koneksi dibuat saat query pertama, jadi
next build tidak butuh database yang menyala. Saat dev, koneksi disimpan di globalThis supaya
HMR tidak membuka koneksi baru di tiap reload.
Skema contoh, tabel todos, memakai bentuk yang sama dengan TodoItem di fitur contoh. Fitur itu
masih memakai penyimpanan di memori; memindahkannya ke database adalah tugas modul dal.
Port 54320, bukan 5432
Section titled “Port 54320, bukan 5432”Port host Postgres di docker-compose.yml adalah 54320. Port 5432 sering sudah dipakai
Postgres lain di mesin developer, dan saat itu terjadi, perintah yang tetap berjalan bisa menyambung
ke database yang salah. Kalau Anda mengubah port, samakan di docker-compose.yml, .env.local,
dan drizzle.config.ts.
Environment
Section titled “Environment”| Variabel | Default | Keterangan |
|---|---|---|
DATABASE_URL |
postgres://postgres:postgres@localhost:54320/app |
URL koneksi Postgres |
Catatan
Section titled “Catatan”drizzle.config.tsdibacadrizzle-kitdi luar Next.js, jadi memakaiprocess.envlangsung. Ini satu-satunya pengecualian aturan “env hanya lewatconfig/env.ts”.- Folder
drizzle/dikecualikan dari Prettier karena dikeloladrizzle-kit. drizzle-kitmembawaesbuild; untuk pnpm 11+ build script-nya sudah diizinkan dipnpm-workspace.yamlproyek hasil generate.