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
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 |
|
}
|
|
|