package migration import ( "fmt" "go.uber.org/zap" "gorm.io/gorm" ) // AddUniqueIndexToFrontendBackendRoutes 为 frontend_backend_routes 表添加唯一索引 func AddUniqueIndexToFrontendBackendRoutes(db *gorm.DB, log *zap.Logger) error { log.Info("开始为 frontend_backend_routes 表添加唯一索引...") // 检查表是否存在 if !db.Migrator().HasTable("frontend_backend_routes") { log.Info("frontend_backend_routes 表不存在,跳过添加唯一索引") return nil } // 检查唯一索引是否已存在 var indexExists bool err := db.Raw(` SELECT COUNT(*) > 0 FROM pg_indexes WHERE tablename = 'frontend_backend_routes' AND indexname = 'idx_frontend_backend_routes_unique' `).Scan(&indexExists).Error if err != nil { log.Error("检查唯一索引是否存在失败", zap.Error(err)) return fmt.Errorf("检查唯一索引失败: %w", err) } if indexExists { log.Info("唯一索引已存在,跳过创建") return nil } // 创建唯一索引 err = db.Exec(` CREATE UNIQUE INDEX idx_frontend_backend_routes_unique ON frontend_backend_routes (frontend_route_id, backend_route) `).Error if err != nil { log.Error("创建唯一索引失败", zap.Error(err)) return fmt.Errorf("创建唯一索引失败: %w", err) } log.Info("✅ frontend_backend_routes 表唯一索引创建成功") return nil }