package main import ( "context" "fmt" "log" "os" "github.com/jackc/pgx/v5/pgxpool" "github.com/joho/godotenv" ) func main() { // 加载环境变量 _ = godotenv.Load("../../.env") dbURL := os.Getenv("DATABASE_URL") if dbURL == "" { dbURL = "postgres://freedak:@localhost:5432/govai_portal?sslmode=disable" } pool, err := pgxpool.New(context.Background(), dbURL) if err != nil { log.Fatalf("无法连接数据库: %v", err) } defer pool.Close() fmt.Println("=== 清空应用硬编码模型配置 ===") fmt.Println("目标:让所有应用自动使用优先级最高的 Provider 的默认模型") // 1. 查看当前状态 fmt.Println("【步骤1】查看当前应用模型配置...") var totalApps, configuredApps int err = pool.QueryRow(context.Background(), ` SELECT COUNT(*) as total, COUNT(CASE WHEN app_config->>'model' IS NOT NULL AND app_config->>'model' != '' THEN 1 END) as configured FROM applications WHERE status = 'approved' `).Scan(&totalApps, &configuredApps) if err != nil { log.Fatalf("查询失败: %v", err) } fmt.Printf(" - 已批准应用总数: %d\n", totalApps) fmt.Printf(" - 配置了模型的应用: %d\n", configuredApps) fmt.Printf(" - 未配置模型的应用: %d\n\n", totalApps-configuredApps) // 2. 清空所有应用的模型配置 fmt.Println("【步骤2】清空所有应用的模型配置...") result, err := pool.Exec(context.Background(), ` UPDATE applications SET app_config = app_config - 'model' WHERE status = 'approved' AND app_config ? 'model' `) if err != nil { log.Fatalf("更新失败: %v", err) } rowsAffected := result.RowsAffected() fmt.Printf("✅ 已清空 %d 个应用的模型配置\n\n", rowsAffected) // 3. 验证结果 fmt.Println("【步骤3】验证结果...") var remainingConfigured int err = pool.QueryRow(context.Background(), ` SELECT COUNT(*) FROM applications WHERE status = 'approved' AND app_config->>'model' IS NOT NULL AND app_config->>'model' != '' `).Scan(&remainingConfigured) if err != nil { log.Fatalf("验证查询失败: %v", err) } if remainingConfigured == 0 { fmt.Println("✅ 所有应用的模型配置已清空") } else { fmt.Printf("⚠️ 还有 %d 个应用仍有模型配置\n", remainingConfigured) } // 4. 显示当前优先级最高的 Provider fmt.Println("\n【步骤4】当前优先级最高的 Provider...") var providerName, defaultModel string var priority int err = pool.QueryRow(context.Background(), ` SELECT name, COALESCE(config->>'default_model', '未配置'), priority FROM model_providers WHERE is_active = true ORDER BY priority DESC, created_at LIMIT 1 `).Scan(&providerName, &defaultModel, &priority) if err != nil { log.Printf("查询 Provider 失败: %v", err) } else { fmt.Printf(" Provider: %s\n", providerName) fmt.Printf(" 默认模型: %s\n", defaultModel) fmt.Printf(" 优先级: %d\n", priority) } fmt.Println("\n=== 配置清理完成 ===") fmt.Println("\n说明:") fmt.Println(" - 现在所有应用将自动使用优先级最高的 Provider 的默认模型") fmt.Println(" - 当前会使用: " + providerName + " / " + defaultModel) fmt.Println(" - 如需特殊应用使用指定模型,可在应用配置中单独设置") }