Prisma Migrate

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?

  1. Konsistensi Skema: Migrasi mastiin kalau struktur database di lingkungan development, testing, dan produksi itu selalu sama dan sinkron sama definisi skema terbaru kita.
  2. 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!
  3. Kolaborasi Tim Jadi Gampang: Kalau kerja tim, semua developer bisa ngejalanin migrasi yang sama buat mastiin database mereka semua update.
  4. 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).
  5. 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:

bashbash
npx prisma migrate dev

Apa aja sih yang dilakuin sama perintah npx prisma migrate dev ini? Banyak!

  1. Ngecek Perubahan di schema.prisma: Dia bakal ngebandingin isi schema.prisma-mu yang sekarang sama kondisi skema terakhir yang dicatet sama Prisma (dari migrasi sebelumnya).
  2. 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).
  3. 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.
  4. 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.
  5. 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 atau update_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").

  1. Buka terminal di root proyekmu.

  2. Jalanin:

    bashbash
    npx prisma migrate dev
  3. 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 terus Enter.
    • Dia bakal bikin file database dev.db (kalau belum ada).
    • Dia bakal bikin tabel User dan Post (beserta kolom-kolomnya dan relasinya) di dalem dev.db itu.
    • Dia bakal nge-generate Prisma Client.

    Outputnya mungkin kayak gini:

    bashbash
    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 file migration.sql. Coba deh buka file SQL itu, kamu bakal liat perintah CREATE TABLE buat User dan Post!

Contoh Skenario Nambahin Field Baru:

Misal, kamu mau nambahin field jumlahLike: Int @default(0) ke model Post di schema.prisma-mu.

  1. Edit prisma/schema.prisma, tambahin field itu ke model Post.
  2. Simpen filenya.
  3. Jalanin lagi di terminal:
    bashbash
    npx prisma migrate dev
  4. Prisma bakal deteksi ada perubahan. Dia bakal nanya lagi nama migrasinya. Kasih nama, misal, tambah_like_ke_post.
  5. 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: Mirip migrate dev tapi gak nge-generate file migrasi SQL historis. Dia langsung nyinkronin database sama schema.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 pake prisma 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!

Uji Pemahamanmu!

Memeriksa status login...

Jaga Struktur Databasemu Tetap Update: Migrasi Skema dengan Prisma Migrate - Dasar Prisma ORM - Dasar Prisma ORM