1 回答
TA貢獻1816條經驗 獲得超6個贊
func NewWithDatabaseInstance(sourceURL string, databaseName string, databaseInstance database.Driver) (*Migrate, error)
所以第一個參數是一個 URL,你傳遞的是腳本本身。NewWithDatabaseInstance調用SchemeFromURL是什么產生了你看到的錯誤(因為你傳遞的 url 不包含 a :)。一個URL包含一個“方案” :,然后是其他信息。
要將 golang-migrate 與文檔中embed的示例結合使用:
//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 {
// ...
}
// ...
}
您會注意到,這會傳入文件夾(作為embed.FS)而不是單個文件。這是因為golang-migrate旨在應用多個遷移,而不是僅針對數據庫運行單個腳本。你應該能夠使用類似的東西:
//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 關注
- 179 瀏覽
添加回答
舉報
