{"record":{"id":"251fe31406dbc301","repo":"t8y2/dbx","slug":"scheduler-job-name-is-ambiguous-s-specify-the-c","errorCode":null,"errorMessage":"scheduler job name is ambiguous: %s; specify the catalog's exact case","messagePattern":"scheduler job name is ambiguous: (.+?); specify the catalog's exact case","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agents/drivers/xugu/main.go","lineNumber":3277,"sourceCode":"\t}\n\tif len(candidates) == 0 {\n\t\tcandidates, err = s.catalogSchedulerJobNameCandidates(xuguCatalogSchedulerJobNameQuery(name, true))\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\tfor _, candidate := range candidates {\n\t\tif candidate == name {\n\t\t\treturn candidate, nil\n\t\t}\n\t}\n\tif len(candidates) == 1 {\n\t\treturn candidates[0], nil\n\t}\n\tif len(candidates) == 0 {\n\t\treturn \"\", fmt.Errorf(\"scheduler job not found: %s\", name)\n\t}\n\treturn \"\", fmt.Errorf(\"scheduler job name is ambiguous: %s; specify the catalog's exact case\", name)\n}\n\nfunc xuguCatalogSchedulerJobNameQuery(name string, caseInsensitive bool) string {\n\texpr := quoteStringLiteral(name)\n\tif caseInsensitive {\n\t\texpr = quoteStringLiteral(strings.ToUpper(name))\n\t\treturn xuguCatalogSchedulerJobNameSelectSQL + \"\\n  AND UPPER(JOB_NAME) = \" + expr\n\t}\n\treturn xuguCatalogSchedulerJobNameSelectSQL + \"\\n  AND JOB_NAME = \" + expr\n}\n\nfunc (s *server) catalogSchedulerJobNameCandidates(query string) ([]string, error) {\n\trows, err := s.queryRows(strings.TrimSpace(query), nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer s.closeRows(rows)\n\tvar result []string","sourceCodeStart":3259,"sourceCodeEnd":3295,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/agents/drivers/xugu/main.go#L3259-L3295","documentation":"When the job-name lookup matches more than one catalog candidate differing only by case, the resolver cannot pick one and returns 'scheduler job name is ambiguous: <name>; specify the catalog's exact case'. The message directs the caller to disambiguate using the exact casing stored in the catalog.","triggerScenarios":"Resolving a scheduler job whose name exists in the catalog under multiple casings (e.g. 'etl_load' and 'ETL_LOAD') while the caller supplied a non-exact-case form.","commonSituations":"Jobs created by different teams/tools with inconsistent casing conventions; migrations that copied a job under a second casing; case-sensitive catalog columns on Xugu.","solutions":["Re-issue the request with the exact catalog casing shown in the job listing/error.","Rename duplicate jobs so a single casing exists, then retry.","Enumerate the candidates and select the intended job explicitly in your tooling."],"exampleFix":"// before\ngetSchedulerJobSource(\"etl_load\") // ambiguous: ETL_LOAD also exists\n// after\ngetSchedulerJobSource(\"ETL_LOAD\") // exact catalog case","handlingStrategy":"validation","validationCode":"jobs := listSchedulerJobs()\nmatches := filterByFold(jobs, name)\nif len(matches) > 1 {\n  return fmt.Errorf(\"pick exact case among %v\", matches)\n}","typeGuard":null,"tryCatchPattern":"if err := getJobSource(name); err != nil {\n  if strings.Contains(err.Error(), \"ambiguous\") {\n    name = exactCaseCandidateFromCatalog(name) // retry with catalog casing\n    getJobSource(name)\n  }\n}","preventionTips":["Adopt a single casing convention for job names team-wide.","Query the catalog with exact case when duplicates may exist.","Rename duplicate-case jobs to keep names unique.","Do not rely on case-insensitive matching as canonical."],"tags":["scheduler","ambiguous-name","case-sensitivity","xugu"],"backgroundTag":"ambiguous-object-name","analyzedSha":"c0390bff16418b651f4728520d99adf8ce48829a","analyzedAt":"2026-09-05T23:05:10.900Z","contentChangedAt":"2026-09-05T23:05:10.900Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}