Skip to main content

使用程式來管理資料庫(DB Migrate)

在這個之前的程式,都是先到資料庫那邊下語法建好表,然後再到程式這邊新增需要的屬性,但這個會有個問題是,如果有一天你需要到新的環境將你的程式部署起來,或是你需要兩個月前的資料庫型態,這時候就會發生你不知道之前執行了什麼樣的sql語法,不曉得兩個月前的資料庫長得怎麼樣(在你資料庫沒有定期備份的情況下) 因此,需要有個機制可以將資料庫的狀態也那納入git的版本控制

在這邊,我使用到的是 https://github.com/golang-migrate/migrate 來幫我們進行資料庫的版本控制 沒有選擇使用gorm的migrate而是直接使用語法的原因主要是因為資料庫如果需要用一些gorm沒有寫到的extension,還是得把這些extension放到程式中,所以才會直接選擇使用語法來進行資料庫的表的版本控制

而這個migrate的工具的使用方式還蠻簡單的 https://github.com/golang-migrate/migrate/blob/master/MIGRATIONS.md 在你需要的地方放上他指定規則的sql檔案

{version}_{title}.up.{extension}
{version}_{title}.down.{extension}

他的version要持續變多,第一個是1,第二個就是2,當然你也可以直接跳10,只要數字變多就可以了 接著,關於up/down的部分,因為在這種版本控制呢,會出現說你今天把原本的程式升級到v2.0.0版,卻發生了很大的bug,需要退回到v1.9.7版,那你的資料庫也會需要將資料變成v1.9.7的形狀,所以up跟down基本上是要相輔相成的,如果up有創表(create table...),那down就要刪表(drop table ...)

他的教學也寫得蠻詳盡的,如果有需要可以點進他的github閱讀他的readme喔

而下面是這次的寫的過成和程式碼

https://www.youtube.com/watch?v=98v_rdLQdYs

https://github.com/kevinyay945/smart-home-backend/tree/v0.6.0