Prisma Migrate
Sudah punya desain skema di `schema.prisma`? Pelajari cara menggunakan Prisma Migrate (`prisma migrate dev`) untuk membuat tabel dan menerapkan perubahan skema ke database Anda secara aman dan konsisten.
Dari Desain ke Database Nyata: "Ngebangun" Pake Prisma Migrate!
Udah jago kan ngedesain model data dan relasinya di file schema.prisma
? Keren! "Cetak biru" atau "blueprint" database kita udah siap. Tapi, blueprint itu kan baru gambar rencana, belum jadi bangunan beneran di "tanah" database kita.
Nah, gimana caranya biar desain skema di schema.prisma
itu bisa bener-bener diterapin ke database kita (misalnya, bikin tabel-tabel baru, nambahin kolom, ngubah tipe data, atau bikin relasi)? Di sinilah Prisma Migrate berperan!
Apa Itu Migrasi Database dan Kenapa Penting?
Seiring waktu, aplikasi kita pasti berkembang. Fitur baru ditambah, kebutuhan data berubah. Artinya, struktur database kita (skema) juga perlu ikut berubah. Proses ngelola dan nerapin perubahan skema database secara bertahap dan terkontrol ini namanya Migrasi Database.
Kenapa Migrasi Database itu Penting?
- Konsistensi Skema: Migrasi mastiin kalau struktur database di lingkungan development, testing, dan produksi itu selalu sama dan sinkron sama definisi skema terbaru kita.
- Pelacakan Perubahan (Version Control buat Database): Tiap perubahan skema itu dicatet sebagai "file migrasi". Jadi, kita punya histori gimana struktur database kita berevolusi. Mirip kayak Git buat kode, tapi ini buat database!
- Kolaborasi Tim Jadi Gampang: Kalau kerja tim, semua developer bisa ngejalanin migrasi yang sama buat mastiin database mereka semua update.
- Rollback (Meskipun Jarang di Prisma Migrate
dev
): Di beberapa sistem migrasi, kalau ada masalah, kita bisa "mundur" ke versi skema sebelumnya. (Prisma Migrate lebih fokus ke alur maju, tapi konsep historisnya ada). - Proses yang Terstruktur: Daripada ngubah database manual pake perintah SQL satu-satu (yang rawan salah dan lupa), migrasi ngasih alur yang lebih terstruktur dan otomatis.
Prisma Migrate: Jagoan Migrasi dari Prisma
Prisma Migrate adalah alat bantu (bagian dari Prisma CLI) yang dirancang khusus buat ngurusin migrasi database berdasarkan file schema.prisma
-mu.
Workflow Utama Prisma Migrate (Perintah prisma migrate dev
):
Perintah yang bakal paling sering kamu pake selama development adalah:
npx prisma migrate dev
Apa aja sih yang dilakuin sama perintah npx prisma migrate dev
ini? Banyak!
- Ngecek Perubahan di
schema.prisma
: Dia bakal ngebandingin isischema.prisma
-mu yang sekarang sama kondisi skema terakhir yang dicatet sama Prisma (dari migrasi sebelumnya). - Nge-generate File Migrasi SQL: Kalau ada perbedaan, Prisma bakal otomatis nge-generate file SQL yang isinya perintah-perintah DDL (Data Definition Language kayak
CREATE TABLE
,ALTER TABLE
,ADD COLUMN
) yang dibutuhin buat ngubah database biar cocok sama skema barumu.- File-file migrasi SQL ini bakal disimpen di dalem folder
prisma/migrations/
dengan nama folder yang ada timestamp dan nama deskriptif (yang nanti bakal dia minta).
- File-file migrasi SQL ini bakal disimpen di dalem folder
- Nerapin Migrasi ke Database Development: Dia bakal ngejalanin file SQL migrasi itu ke database development-mu (yang diset di
DATABASE_URL
file.env
). Ini yang bener-bener bikin tabel baru, nambah kolom, dll. - Nge-generate Ulang Prisma Client: Setelah database-nya diupdate, dia juga bakal otomatis ngejalanin
prisma generate
biar Prisma Client-mu jadi sinkron sama skema database terbaru. - Nanya Nama Migrasi: Kalau ini migrasi baru (bukan cuma nge-reset), dia bakal nanya kamu buat ngasih nama deskriptif buat migrasi ini (misal,
tambah_model_produk
atauupdate_field_email_user
). Ini bagus buat dokumentasi.
Contoh Skenario Pertama Kali Pake prisma migrate dev
:
Misal, kita baru aja selesai ngedefinisiin model User
dan Post
di schema.prisma
kita (yang pake provider sqlite
dan DATABASE_URL="file:./dev.db"
atau file:./prisma/dev.db"
).
-
Buka terminal di root proyekmu.
-
Jalanin:
bash
npx prisma migrate dev
-
Karena ini pertama kali dan database (file
dev.db
) mungkin belum ada, Prisma bakal:- Nanya nama buat migrasi ini. Ketik aja, misal,
init_user_and_post_models
terusEnter
. - Dia bakal bikin file database
dev.db
(kalau belum ada). - Dia bakal bikin tabel
User
danPost
(beserta kolom-kolomnya dan relasinya) di dalemdev.db
itu. - Dia bakal nge-generate Prisma Client.
Outputnya mungkin kayak gini:
bash
Environment variables loaded from .env Prisma schema loaded from prisma/schema.prisma Datasource "db": SQLite database "dev.db" at "file:./dev.db" SQLite database dev.db created at file:./dev.db ✔ Enter a name for the new migration: … init_user_and_post_models Applying migration `20240719100000_init_user_and_post_models` The following migration(s) have been created and applied: migrations/ └─ 20240719100000_init_user_and_post_models/ └─ migration.sql Your database is now in sync with your schema. Generated Prisma Client (x.y.z) to ./node_modules/@prisma/client
Sekarang, kalau kamu intip folder
prisma/migrations/
, bakal ada folder baru (misal,20240719100000_init_user_and_post_models
) yang isinya filemigration.sql
. Coba deh buka file SQL itu, kamu bakal liat perintahCREATE TABLE
buatUser
danPost
! - Nanya nama buat migrasi ini. Ketik aja, misal,
Contoh Skenario Nambahin Field Baru:
Misal, kamu mau nambahin field jumlahLike: Int @default(0)
ke model Post
di schema.prisma
-mu.
- Edit
prisma/schema.prisma
, tambahin field itu ke modelPost
. - Simpen filenya.
- Jalanin lagi di terminal:
bash
npx prisma migrate dev
- Prisma bakal deteksi ada perubahan. Dia bakal nanya lagi nama migrasinya. Kasih nama, misal,
tambah_like_ke_post
. - Dia bakal nge-generate file migrasi SQL baru (yang isinya
ALTER TABLE Post ADD COLUMN jumlahLike INTEGER NOT NULL DEFAULT 0
) dan nerapinnya ke database. Prisma Client juga di-update.
Gampang banget kan ngejaga database tetep sinkron sama skemamu?
Perintah Prisma Migrate Lainnya (Sekadar Tahu)
Selain migrate dev
, ada beberapa perintah lain yang kadang berguna, terutama buat lingkungan produksi atau skenario yang lebih kompleks (tapi buat development, migrate dev
itu yang utama):
npx prisma db push
: Miripmigrate dev
tapi gak nge-generate file migrasi SQL historis. Dia langsung nyinkronin database samaschema.prisma
saat ini. Cocok buat prototyping cepet atau pas awal banget development di mana kamu belum peduli sama histori migrasi. Tapi, buat proyek beneran,migrate dev
lebih aman dan direkomendasiin karena nyimpen histori.npx prisma migrate reset
: Ngeset ulang database development-mu ke kondisi kosong, terus nerapin semua migrasi yang udah ada dari awal. Berguna kalau database-mu jadi "kacau" dan mau mulai dari bersih lagi (data di database development bakal ilang!).npx prisma migrate deploy
: Ini dipake buat nerapin migrasi ke database produksi atau staging. Dia cuma ngejalanin file-file migrasi yang udah ada dan dicatet, gak nge-generate migrasi baru atau ngecek perubahan skema.npx prisma migrate status
: Ngeliat status migrasi saat ini, migrasi mana aja yang udah diterapin, mana yang belum.
Pentingnya Database Development vs. Produksi
prisma migrate dev
itu dirancang buat dipake di lingkungan development lokalmu. Dia aman buat nge-generate dan nerapin migrasi, bahkan kalau itu artinya nge-reset database (dia bakal ngasih warning kalau ada potensi data ilang).- Buat database produksi (yang datanya udah beneran dan gak boleh ilang), alurnya beda. Kamu gak pake
migrate dev
di server produksi. Kamu nge-generate file migrasi di development, nge-tes, terus di server produksi kamu pakeprisma migrate deploy
buat nerapin migrasi yang udah fix itu. Ini lebih aman.
Untuk sekarang, fokus kita di prisma migrate dev
aja udah cukup banget buat ngelola database SQLite lokal kita.
Prisma Migrate ini bener-bener ngebantu banget! Dia ngurusin semua keribetan nge-generate SQL DDL dan mastiin database kita selalu "seirama" sama desain skema di schema.prisma
. Ini bikin kita bisa lebih fokus ke ngedesain model data yang bagus tanpa perlu jadi ahli SQL buat ngatur tabelnya.
Setiap kali kamu ngubah schema.prisma
(nambah model, nambah field, ganti tipe, bikin relasi), jangan lupa jalanin npx prisma migrate dev
ya!