You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

52 lines
1.3 KiB

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
}