第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

你可以使用 golang-migrate 和 go 的嵌入功能嗎?

你可以使用 golang-migrate 和 go 的嵌入功能嗎?

Go
郎朗坤 2022-11-28 10:42:24
我正在嘗試使用golang-migrate將 sql 文件遷移到我的 postgresql 數(shù)據(jù)庫(kù)中。我可能做錯(cuò)了,但是當(dāng)我運(yùn)行遷移命令時(shí),它說(shuō)沒有找到方案: $ go run ./cmd/  migrate2022/04/05 16:20:29 no schemeexit status 1這是代碼:  // package dbschema contains the database schema, migrations, and seeding data.    package dbschema        import (        "context"        _ "embed" // Calls init function.        "fmt"        "log"            "github.com/golang-migrate/migrate/v4"        "github.com/golang-migrate/migrate/v4/database/postgres"        "github.com/jmoiron/sqlx"        "github.com/jonleopard/bootstrap/pkg/sys/database"        _ "github.com/lib/pq"    )        var (        //go:embed sql/000001_schema.up.sql        schemaDoc string            //go:embed sql/seed.sql        seedDoc string    )        // Migrate attempts to bring the schema for db up to date with the migrations    // defined in this package.    func Migrate(ctx context.Context, db *sqlx.DB) error {        if err := database.StatusCheck(ctx, db); err != nil {            return fmt.Errorf("status check database: %w", err)        }            driver, err := postgres.WithInstance(db.DB, &postgres.Config{})        if err != nil {            return fmt.Errorf("Construct Migrate driver: %w", err)        }            m, err := migrate.NewWithDatabaseInstance(schemaDoc, "postgres", driver)        if err != nil {            log.Fatal(err)        }            return m.Up()    }
查看完整描述

1 回答

?
瀟湘沐

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊

的定義NewWithDatabaseInstance是:

func NewWithDatabaseInstance(sourceURL string, databaseName string, databaseInstance database.Driver) (*Migrate, error)

所以第一個(gè)參數(shù)是一個(gè) URL,你傳遞的是腳本本身。NewWithDatabaseInstance調(diào)用SchemeFromURL是什么產(chǎn)生了你看到的錯(cuò)誤(因?yàn)槟銈鬟f的 url 不包含 a :)。一個(gè)URL包含一個(gè)“方案” :,然后是其他信息。

要將 golang-migrate 與文檔中embed示例結(jié)合使用:

//go:embed testdata/migrations/*.sql

var fs embed.FS


func main() {

    d, err := iofs.New(fs, "testdata/migrations")

    if err != nil {

        log.Fatal(err)

    }

    m, err := migrate.NewWithSourceInstance("iofs", d, "postgres://postgres@localhost/postgres?sslmode=disable")

    if err != nil {

        log.Fatal(err)

    }

    err = m.Up()

    if err != nil {

        // ...

    }

    // ...

}

您會(huì)注意到,這會(huì)傳入文件夾(作為embed.FS)而不是單個(gè)文件。這是因?yàn)間olang-migrate旨在應(yīng)用多個(gè)遷移,而不是僅針對(duì)數(shù)據(jù)庫(kù)運(yùn)行單個(gè)腳本。你應(yīng)該能夠使用類似的東西:


//go:embed sql/*.sql

var schemaFs embed.FS

...

d, err := iofs.New(fs, "sql") // Get migrations from sql folder

if err != nil {

    log.Fatal(err)

}

m, err := migrate.NewWithSourceInstance("iofs", d, "postgres", driver)


查看完整回答
反對(duì) 回復(fù) 2022-11-28
  • 1 回答
  • 0 關(guān)注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)