t8y2/dbx · error
scheduler job name is ambiguous: %s; specify the catalog's e
Error message
scheduler job name is ambiguous: %s; specify the catalog's exact case
What it means
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.
Source
Thrown at agents/drivers/xugu/main.go:3277
}
if len(candidates) == 0 {
candidates, err = s.catalogSchedulerJobNameCandidates(xuguCatalogSchedulerJobNameQuery(name, true))
if err != nil {
return "", err
}
}
for _, candidate := range candidates {
if candidate == name {
return candidate, nil
}
}
if len(candidates) == 1 {
return candidates[0], nil
}
if len(candidates) == 0 {
return "", fmt.Errorf("scheduler job not found: %s", name)
}
return "", fmt.Errorf("scheduler job name is ambiguous: %s; specify the catalog's exact case", name)
}
func xuguCatalogSchedulerJobNameQuery(name string, caseInsensitive bool) string {
expr := quoteStringLiteral(name)
if caseInsensitive {
expr = quoteStringLiteral(strings.ToUpper(name))
return xuguCatalogSchedulerJobNameSelectSQL + "\n AND UPPER(JOB_NAME) = " + expr
}
return xuguCatalogSchedulerJobNameSelectSQL + "\n AND JOB_NAME = " + expr
}
func (s *server) catalogSchedulerJobNameCandidates(query string) ([]string, error) {
rows, err := s.queryRows(strings.TrimSpace(query), nil)
if err != nil {
return nil, err
}
defer s.closeRows(rows)
var result []stringView on GitHub (pinned to c0390bff16)
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.
Example fix
// before
getSchedulerJobSource("etl_load") // ambiguous: ETL_LOAD also exists
// after
getSchedulerJobSource("ETL_LOAD") // exact catalog case Defensive patterns
Strategy: validation
Validate before calling
jobs := listSchedulerJobs()
matches := filterByFold(jobs, name)
if len(matches) > 1 {
return fmt.Errorf("pick exact case among %v", matches)
} Try / catch
if err := getJobSource(name); err != nil {
if strings.Contains(err.Error(), "ambiguous") {
name = exactCaseCandidateFromCatalog(name) // retry with catalog casing
getJobSource(name)
}
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- sequence name is ambiguous: %s.%s; specify the catalog's exa
- scheduler job not found: %s
- scheduler jobs must be read from the scheduler job scope
- scheduler job name is required
- sequence name is required
AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05).
Data as JSON: /api/errors/251fe31406dbc301.
Report an issue: GitHub.