我正在使用迁移包github.com/rubenv/sql-migrate
。我有我的迁移文件(一堆 .sql 文件)在migrationFilesBaseDir
. 该函数DoMigrations
包含我的迁移逻辑,如下所示:
func DoMigrations(dsn, migrationFilesBaseDir string) {
m := migration{
dsn: dsn,
migrationFilesBaseDir: migrationFilesBaseDir,
}
driver, err := sql.Open("postgres", m.dsn)
if err != nil {
panic(err)
}
m.driver = driver
tableExists, err := m.checkMigratedFilesTableExists()
if err != nil {
panic(err)
}
if tableExists {
if err := m.runNewlyAddedMigrations(); err != nil {
if err == errNoNewlyAddedMigrationFile {
return
}
panic(err)
}
} else {
if _, err := m.runInitialMigration(); err != nil {
panic(err)
}
}
}
DoMigrations() 所做的只是
- 检查 db 中是否存在 migrated_files 表
- 如果表不存在(即,没有在当前数据库上执行过迁移),则
runInitialMigration
elserunNewlyAddedMigrations
。
基本上,runInitialMigration
创建一个migrated_files
记录迁移文件名的表。我必须在其中一个 db 表中进行修改(种子条目),所以我在.sql
里面写了一个新的迁移()文件migrationFilesBaseDir
,再次运行DoMigrations()
,然后运行 NewlyAddedMigrations。runNewlyAddedMigrations 检查在表migrationFilesBaseDir
条目中找到的文件名migrated_files
以检测新添加的.sql
文件。在将新添加文件的内容应用到数据库时,程序会出现错误并恐慌 Unable to create migration plan because of XXXX: unknown migration in database
。
请问我该如何解决?