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:
| Karakter | Encode |
|---|---|
@ | %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:generateUntuk 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_URLbaru dibaca pada akses pertama. - Saat kamu mengubah
DATABASE_URLdi.env.local, Next me-reload env dan client otomatis membangun ulang pool dengan kredensial baru — tidak perlu restart dev server. - Jika
DATABASE_URLkosong, 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 devJika 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.
