diff --git a/server-go/internal/database/migrate.go b/server-go/internal/database/migrate.go index 3874ed2..e01df10 100644 --- a/server-go/internal/database/migrate.go +++ b/server-go/internal/database/migrate.go @@ -26,6 +26,7 @@ func RunMigrations(db *gorm.DB) error { if err != nil { return fmt.Errorf("加载嵌入式迁移文件: %w", err) } + defer sourceDriver.Close() databaseDriver, err := postgres.WithInstance(sqlDB, &postgres.Config{}) if err != nil { @@ -36,9 +37,6 @@ func RunMigrations(db *gorm.DB) error { if err != nil { return fmt.Errorf("创建迁移实例: %w", err) } - defer func() { - _, _ = m.Close() - }() if err := m.Up(); err != nil && !errors.Is(err, migrate.ErrNoChange) { return fmt.Errorf("执行数据库迁移: %w", err) diff --git a/开发交接记录.md b/开发交接记录.md index 9ca5ec9..e4c4a78 100644 --- a/开发交接记录.md +++ b/开发交接记录.md @@ -815,6 +815,7 @@ MVP 沿用 IoTDB(现状);TDengine 作为生产规模化候选(先基准 - 新增 `000001_baseline.up.sql` / `000001_baseline.down.sql`,覆盖当前 26 张业务表、索引和唯一约束; - 新增 `internal/database/migrate.go`:`RunMigrations`、`CheckSchemaVersion`、`CurrentSchemaVersion`; - 上线前将 `000001_baseline.up.sql` 调整为 `CREATE TABLE/INDEX IF NOT EXISTS`,兼容已由 AutoMigrate 建表的开发库; +- 开发服务器首轮启动暴露 `migrate.Close()` 会关闭底层数据库连接,已改为只关闭迁移 source,保留 `sql.DB` 供后续启动检查使用; - `database.Init` 改为先执行版本化迁移并校验 `schema_migrations`,生产环境忽略 `ALLOW_DEV_AUTOMIGRATE`;开发环境仅显式开启时允许 AutoMigrate; - `config.Config` 增加 `APP_ENV`、`ALLOW_DEV_AUTOMIGRATE`;README 与物理机部署指南补充迁移说明和环境变量; - 新增 sqlmock 测试,覆盖版本匹配、版本不匹配、空版本、dirty 状态和嵌入式迁移文件解析。