BigStarter
Database

Setup & Koneksi

Konfigurasi DATABASE_URL untuk Drizzle/Prisma, pooler Supabase mode transaksi, prisma generate, dan perilaku hot-reload koneksi.

Setup & Koneksi

1. Ambil Connection String

Di Supabase Dashboard, buka Connect → ORM (Drizzle/Prisma). Gunakan URL pooler mode transaksi persis seperti yang diberikan dialog:

DATABASE_URL="postgresql://postgres.<project-ref>:<password>@aws-1-<region>.pooler.supabase.com:6543/postgres"

Kenapa URL ini:

  • Port 6543 (transaction-mode pooler) adalah rekomendasi resmi Supabase untuk ORM — IPv4-only, dibagi (shared), dan cocok untuk serverless.
  • Drizzle memakai unnamed prepared statements dan transaksi BEGIN…COMMIT — keduanya aman di mode transaksi.
  • Jangan gunakan hostname direct (db.<ref>.supabase.co) — IPv6-only dan tanpa pooling.

Simpan di .env.local (prioritas tertinggi di Next.js). Cukup satu sumber — jangan duplikat di .env agar tidak ada dua nilai berbeda.

2. Encode Password Kalau Perlu

Jika password database mengandung karakter khusus, percent-encode sebelum ditempel ke URL:

KarakterEncode
@%40
#%23
:%3A
/%2F
?%3F
%%25

Password yang tidak di-encode akan terpotong di karakter tersebut dan otomatis gagal autentikasi (password authentication failed).

3. Prisma: Generate Client (hanya stack prisma)

Jika projectmu memakai ORM Prisma (atau kamu berencara switch ke Prisma), generate client sekali setelah perubahan schema:

npm run db:prisma:generate

Untuk stack Drizzle tidak ada langkah generate — client langsung dipakai.

4. Perilaku Koneksi di Development

Client database (infrastructure/db/client.drizzle.ts dan client.prisma.ts) bersifat lazy singleton:

  • Tidak ada koneksi dibuka saat import/build — DATABASE_URL baru dibaca pada akses pertama.
  • Saat kamu mengubah DATABASE_URL di .env.local, Next me-reload env dan client otomatis membangun ulang pool dengan kredensial baru — tidak perlu restart dev server.
  • Jika DATABASE_URL kosong, akses pertama melempar error yang jelas — bukan crash saat build.

5. Verifikasi Cepat

Jalankan dev server lalu buka halaman yang memakai data (mis. tasks):

npm run dev

Jika muncul password authentication failed, nilainya belum match — cek ulang password di dashboard Supabase project yang sama (bandingkan project-ref di URL).

Memilih Host Lain

Stack host tidak terkunci ke Supabase untuk data. DATABASE_URL bisa diarahkan ke Neon, Railway, atau Postgres self-hosted — Drizzle/Prisma terhubung via connection string Postgres biasa. Yang tetap membutuhkan Supabase hanyalah Auth, Storage, dan Realtime.