Database Migration Persistent
Penjelasan
Persistent mendukung migrasi otomatis lewat fungsi runMigration yang membandingkan definisi entity di kode dengan skema database aktual, lalu menjalankan perintah ALTER/CREATE TABLE yang diperlukan agar keduanya sinkron. Ini sangat memudahkan development karena setiap kali entity berubah di config/models, cukup jalankan ulang aplikasi (migrasi biasanya dipanggil saat startup di Application.hs). Namun migrasi otomatis Persistent punya batasan: ia tidak bisa menangani operasi destruktif seperti mengganti nama kolom atau tipe data secara aman (biasanya hanya menambah kolom baru), sehingga untuk perubahan kompleks di production disarankan menulis migrasi SQL manual yang dijalankan terpisah, atau memakai tool migrasi eksternal yang lebih matang untuk kasus tersebut.
Contoh Konsep
-- src/Application.hs
makeFoundation :: AppSettings -> IO App
makeFoundation appSettings = do
pool <- ...
runSqlPool (runMigration migrateAll) pool
...
-- migrateAll digenerate otomatis dari config/models lewat
-- share [mkPersist sqlSettings, mkMigrate "migrateAll"] $(persistFileWith lowerCaseSettings "config/models")
Praktikum
Jelaskan langkah yang perlu dilakukan setelah menambahkan field baru statusTerbit Bool default=False ke entity Artikel di config/models.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Selalu beri nilai default pada field baru yang ditambahkan ke entity yang sudah punya data (mis. default=False), karena migrasi otomatis Persistent perlu nilai default untuk mengisi baris lama yang belum punya kolom tersebut.