From a1f1e7baaa0a0c9c3c70506cb8549f2ac709ab28 Mon Sep 17 00:00:00 2001 From: weijuesen Date: Thu, 13 Aug 2026 23:45:20 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=BF=81=E7=A7=BB=E5=90=8E=E4=BF=9D?= =?UTF-8?q?=E7=95=99=E6=95=B0=E6=8D=AE=E5=BA=93=E8=BF=9E=E6=8E=A5=E4=BE=9B?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E6=A3=80=E6=9F=A5=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server-go/internal/database/migrate.go | 4 +--- 开发交接记录.md | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) 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 状态和嵌入式迁移文件解析。