1

我正在使用迁移包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() 所做的只是

  1. 检查 db 中是否存在 migrated_files 表
  2. 如果表不存在(即,没有在当前数据库上执行过迁移),则runInitialMigrationelse runNewlyAddedMigrations

基本上,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

请问我该如何解决?

4

0 回答 0