diff --git a/cli/commands/migrate_test.go b/cli/commands/migrate_test.go index 3eb333ded44d9..a8677bee25825 100644 --- a/cli/commands/migrate_test.go +++ b/cli/commands/migrate_test.go @@ -128,6 +128,8 @@ func testMigrate(t *testing.T, endpoint *url.URL, migrationsDir string) { table: test type: untrack_table `) + mustWriteFile(t, migrationsDir, "2_add_table_test.up.sql", `CREATE TABLE "author"("id" serial NOT NULL, PRIMARY KEY ("id") )`) + mustWriteFile(t, migrationsDir, "2_add_table_test.down.sql", `DROP TABLE "author";`) // Apply 1_create_table_test.up.sql testMigrateApply(t, endpoint, migrationsDir, "1", "", "", "") diff --git a/cli/migrate/migrate.go b/cli/migrate/migrate.go index 2df60674656be..a343e7632b8c3 100644 --- a/cli/migrate/migrate.go +++ b/cli/migrate/migrate.go @@ -782,6 +782,7 @@ func (m *Migrate) readDown(limit int64, ret chan<- interface{}) { // to stop execution because it might have received a stop signal on the // GracefulStop channel. func (m *Migrate) runMigrations(ret <-chan interface{}) error { + var lastInsertVersion int64 for r := range ret { if m.stop() { return nil @@ -799,14 +800,18 @@ func (m *Migrate) runMigrations(ret <-chan interface{}) error { return err } - if int64(migr.Version) == migr.TargetVersion { - // Insert Version number into the table - if err := m.databaseDrv.InsertVersion(int64(migr.Version)); err != nil { - return err + version := int64(migr.Version) + if version == migr.TargetVersion { + if version != lastInsertVersion { + // Insert Version number into the table + if err := m.databaseDrv.InsertVersion(version); err != nil { + return err + } + lastInsertVersion = version } } else { // Delete Version number from the table - if err := m.databaseDrv.RemoveVersion(int64(migr.Version)); err != nil { + if err := m.databaseDrv.RemoveVersion(version); err != nil { return err } }