1 回答

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
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)
- 1 回答
- 0 關(guān)注
- 141 瀏覽
添加回答
舉報(bào)