mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-03 16:00:25 +08:00
46 lines
1013 B
Go
46 lines
1013 B
Go
package migrations
|
|
|
|
import (
|
|
"context"
|
|
"github.com/go-gormigrate/gormigrate/v2"
|
|
"gorm.io/gorm"
|
|
"mayfly-go/pkg/rediscli"
|
|
"time"
|
|
)
|
|
|
|
// RunMigrations 数据库迁移操作
|
|
func RunMigrations(db *gorm.DB) error {
|
|
// 添加分布式锁, 防止多个服务同时执行迁移
|
|
if rediscli.GetCli() != nil {
|
|
if ok, err := rediscli.GetCli().
|
|
SetNX(context.Background(), "migrations", "lock", time.Minute).Result(); err != nil {
|
|
return err
|
|
} else if !ok {
|
|
return nil
|
|
}
|
|
defer rediscli.Del("migrations")
|
|
}
|
|
return run(db,
|
|
T2022,
|
|
T20230720,
|
|
)
|
|
}
|
|
|
|
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: 200,
|
|
UseTransaction: true,
|
|
ValidateUnknownMigrations: true,
|
|
}, ms)
|
|
if err := m.Migrate(); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|