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.
53 lines
1.3 KiB
53 lines
1.3 KiB
1 week ago
|
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
|
||
|
}
|