Go: add migrate database flag (#16719)

### Summary

--migrate will trigger database migration
```
./ragflow_main --api --migrate
```

Signed-off-by: Jin Hai <haijin.chn@gmail.com>
This commit is contained in:
Jin Hai
2026-07-07 20:11:40 +08:00
committed by GitHub
parent 4da9429451
commit 568bac673b
2 changed files with 16 additions and 10 deletions

View File

@@ -62,6 +62,7 @@ type serverArgs struct {
helpFlag bool
versionFlag bool
debugLog bool
migrateDB bool
configPath *string // Used by admin, api; user defined config path
initSuperUser bool // Used by admin;
port *int // Used by admin, api
@@ -81,6 +82,8 @@ func parseArgs() (*serverArgs, error) {
case "--admin":
serverMode = "admin"
args.mode = &serverMode
case "--migrate":
args.migrateDB = true
case "--ingestor":
serverMode = "ingestor"
args.mode = &serverMode
@@ -335,7 +338,7 @@ func main() {
server.PrintAll()
// Initialize database
if err = dao.InitDB(); err != nil {
if err = dao.InitDB(arguments.migrateDB); err != nil {
common.Fatal("Failed to initialize database", zap.Error(err))
}

View File

@@ -65,7 +65,7 @@ type LLMFactoriesFile struct {
}
// InitDB initialize database connection
func InitDB() error {
func InitDB(migrateDB bool) error {
cfg := server.GetConfig()
dbCfg := cfg.Database
@@ -160,17 +160,20 @@ func InitDB() error {
&entity.FileCommitItem{},
}
for _, m := range dataModels {
if err = autoMigrateSafely(DB, m); err != nil {
return fmt.Errorf("failed to migrate model %T: %w", m, err)
if migrateDB {
common.Info("Migrating database schema...")
for _, m := range dataModels {
if err = autoMigrateSafely(DB, m); err != nil {
return fmt.Errorf("failed to migrate model %T: %w", m, err)
}
}
}
// Run manual migrations for complex schema changes
if err = RunMigrations(DB); err != nil {
return fmt.Errorf("failed to run manual migrations: %w", err)
// Run manual migrations for complex schema changes
if err = RunMigrations(DB); err != nil {
return fmt.Errorf("failed to run manual migrations: %w", err)
}
common.Info("Database schema migrated successfully")
}
// Seed built-in agent templates so the Go backend can serve the
// "create agent from template" catalogue without relying on Python-side
// initialization.