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 关注
- 202 浏览
添加回答
举报
