從 Java 的世界轉換到 Go 的世界,就會開始尋找對應的服務和專案,在 Java 世界資料庫 migration 最有名的就是 liquibase 和 flyway ,那在 Go 的世界也有相對應的東西嗎?
目前在用的 Go Buffalo 專案,之所以喜歡它就是因為他是類似 Spring boot & JHipster 的存在,其中也包括了 database migration 的 tools - fizz ,透過它們自訂的 DSL 來描述 DB schema。根據 fizz doc 裡面有最基本的範例 (不過說實在還有些陽春),主要分為幾個部分:
1. 如何用 fizz DSL 來描述DB 動作,包含 Create table, Alter column...等。簡單範例如下
create_table("users") { t.Column("email", "string", {}) t.Column("twitter_handle", "string", {"size": 50}) t.Column("age", "integer", {"default": 0}) t.Column("admin", "bool", {"default": false}) t.Column("company_id", "uuid", {"default_raw": "uuid_generate_v1()"}) t.Column("bio", "text", {"null": true}) t.Column("joined_at", "timestamp", {}) } create_table("todos") { t.Column("user_id", "integer", {}) t.Column("title", "string", {"size": 100}) t.Column("details", "text", {"null": true}) t.ForeignKey("user_id", {"users": ["id"]}, {"on_delete": "cascade"}) }
2. 如何直接透過 fizz 執行 SQL 指令 (方便用來塞初始化資料)
3. 如何 migration & rollback db schema (透過不同檔案 *.up.fizz 和 *.down.fizz)
比起 liquibase ,希望可以增加幾個功能讓使用起來更方便:
- scan model 和 schema 之間的差異,自動產生 fizz 描述檔
- 開啟程式時自動執行 migration 和檢驗 model 與 schema 是否有正確
當然這些 tools 通常都會伴隨著綁定的 ORM 一起推出,下面也列出其他 Go database migration 工具:
- https://github.com/golang-migrate/migrate
- https://github.com/rubenv/sql-migrate
- https://github.com/go-gormigrate/gormigrate
不知道大家還有用過什麼更好用的工具嗎?
沒有留言:
張貼留言