Files
mayfly-go/server/migration/migration.go
2025-04-15 21:42:31 +08:00

54 lines
1.1 KiB
Go

package migration
import (
"mayfly-go/migration/migrations"
"mayfly-go/pkg/logx"
"mayfly-go/pkg/rediscli"
"time"
"github.com/go-gormigrate/gormigrate/v2"
"gorm.io/gorm"
)
// RunMigrations 数据库迁移操作
func RunMigrations(db *gorm.DB) error {
logx.Info("start to run migrations")
// 添加分布式锁, 防止多个服务同时执行迁移
lock := rediscli.NewLock("mayfly:db:migrations", 1*time.Minute)
if lock != nil {
if !lock.Lock() {
return nil
}
defer lock.UnLock()
}
err := run(db,
migrations.Init,
migrations.V1_9,
)
if err == nil {
logx.Info("migrations run success")
}
return err
}
func run(db *gorm.DB, fs ...func() []*gormigrate.Migration) error {
var ms []*gormigrate.Migration
for _, f := range fs {
ms = append(ms, f()...)
}
m := gormigrate.New(db, &gormigrate.Options{
TableName: "migrations",
IDColumnName: "id",
IDColumnSize: 300,
UseTransaction: true,
ValidateUnknownMigrations: false,
}, ms)
if err := m.Migrate(); err != nil {
return err
}
return nil
}