diff --git a/cmd/ragflow_server.go b/cmd/ragflow_server.go index 57eddf28b6..7c40e5956d 100644 --- a/cmd/ragflow_server.go +++ b/cmd/ragflow_server.go @@ -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)) } diff --git a/internal/dao/database.go b/internal/dao/database.go index af48cd4850..6af1fd0c44 100644 --- a/internal/dao/database.go +++ b/internal/dao/database.go @@ -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.