Goose:Go 語言漸進式的數據庫遷移工具

數據庫遷移是軟件開發過程中重要的一部分,隨着業務的發展和需求的變化,數據庫結構經常需要做出調整。Goose 是一個出色的數據庫遷移工具,它通過 SQL 腳本和 Go 函數支持漸進式的數據庫變化。下面是一篇詳細的文章,它將深入介紹 Goose 的用法,並提供豐富的示例幫助你開始使用 Goose

Goose 簡介

Goose 是一款能夠管理數據庫架構變更的工具,提供了一系列命令來幫助開發者創建和應用遷移。從 v3.0.0 版本開始,Goose 增加了對 Go 模塊的支持,同時也兼容了舊的 v2.x.y 版本。它支持將 SQL 遷移嵌入到 Go 應用中,要求 Go 版本 1.16 及以上。如果你使用的是 Go 1.15 或更低版本,則需要使用 v3.0.1

Goose 安裝

直接通過 go 命令安裝 Goose

go install github.com/pressly/goose/v3/cmd/goose@latest

此命令將會安裝 Goose 可執行文件到 $GOPATH/bin 目錄。

對於不希望安裝與數據庫連接相關命令的輕量版,可以使用獨有的構建標籤:

go build -tags='no_postgres no_mysql no_sqlite3 no_ydb' -o goose ./cmd/goose

對於 macOS 用戶,Goose 可以通過 Homebrew 安裝:

brew install goose

查看 Goose 文檔獲得更多安裝說明。

Goose 使用方法

以下表格說明了 Goose 工具的基本用法:

ewfiqt

你可以設置環境變量 GOOSE_DRIVER, GOOSE_DBSTRING, 和 GOOSE_MIGRATION_DIR 來定製 Goose 的行爲。

SQL 遷移示例

一個 SQL 遷移文件應該包含升級(Up)和(可選的)降級(Down)部分。例如:

-- +goose Up
-- SQL in section 'Up' is executed when this migration is applied
CREATE TABLE users (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY(id)
);

-- +goose Down
-- SQL in section 'Down' is executed when this migration is rolled back
DROP TABLE users;

注意:遷移文件必須明確一次只有一個 Up 註釋。如果有 Down 註釋則必須放在 Up 後面。

Go 遷移示例

對於 Go 遷移,你需要創建一個自定義的 Goose 二進制可執行文件,並顯式註冊你的遷移函數。

package migrations

import (
    "database/sql"
    "github.com/pressly/goose/v3"
)

func init() {
    goose.AddMigration(Up, Down)
}

func Up(tx *sql.Tx) error {
    // perform a migration
    return nil
}

func Down(tx *sql.Tx) error {
    // perform a migration rollback
    return nil
}

接下來,使用指令 goose up 應用遷移,或者使用 goose down 進行回滾。

高級特性

Goose 提供了一些高級特性,例如:

結論

Goose 是一種靈活且強大的遷移工具,適用於多種數據庫系統,支持 SQL 和 Go 兩種遷移方式。遵循本文的詳細介紹和示例,你將能夠輕鬆地開始使用 Goose 進行數據庫遷移。不要忘記,實踐是學習新技能的最好方式,因此立刻開始嘗試使用 Goose 吧!

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/jlL8vIiPd9ouXju2AIkeUA