🐛 fix(db): rename composite unique indexes to avoid drop/recreate on restart

- Model: rename `uk_model_name` -> `uk_model_name_delete_at`
  (composite on `model_name` + `deleted_at`)
- Vendor: rename `uk_vendor_name` -> `uk_vendor_name_delete_at`
  (composite on `name` + `deleted_at`)
- Keep legacy cleanup in `model/main.go` to drop old index names
  (`uk_model_name`, `model_name`, `uk_vendor_name`, `name`) for compatibility.

Result: idempotent GORM migrations and no unnecessary index churn on MySQL restarts.

Files:
- `model/model_meta.go`
- `model/vendor_meta.go`
This commit is contained in:
t0ng7u
2025-08-31 13:00:28 +08:00
parent 0d57b1acd4
commit 6d7c00634c
3 changed files with 10 additions and 9 deletions

View File

@@ -270,9 +270,9 @@ func migrateDB() error {
dropIndexIfExists("vendors", "uk_vendor_name") // 新版复合索引名称(若已存在)
dropIndexIfExists("vendors", "name") // 旧版列级唯一索引名称
//if !common.UsingPostgreSQL {
// return migrateDBFast()
//}
// 清理旧索引名(兼容历史),避免与新的复合唯一索引冲突
// 说明:仅清理旧名 uk_model_name/model_name、uk_vendor_name/name新索引名 uk_model_name_delete_at/uk_vendor_name_delete_at 不在清理范围
// 计划:该兼容逻辑将在后续几个版本中移除
err := DB.AutoMigrate(
&Channel{},
&Token{},
@@ -299,8 +299,9 @@ func migrateDB() error {
}
func migrateDBFast() error {
// 修复旧版本留下的唯一索引,允许软删除后重新插入同名记录
// 删除单列唯一索引(列级 UNIQUE及早期命名方式防止与新复合唯一索引冲突
// 清理旧索引名(兼容历史),允许软删除后重新插入同名记录
// 说明:仅清理旧名 uk_model_name/model_name、uk_vendor_name/name新索引名 uk_model_name_delete_at/uk_vendor_name_delete_at 不在清理范围
// 计划:该兼容逻辑将在后续几个版本中移除
dropIndexIfExists("models", "uk_model_name")
dropIndexIfExists("models", "model_name")