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 []string

View on GitHub (pinned to c0390bff16)

Solutions

  1. Re-issue the request with the exact catalog casing shown in the job listing/error.
  2. Rename duplicate jobs so a single casing exists, then retry.
  3. 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

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


AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05). Data as JSON: /api/errors/251fe31406dbc301. Report an issue: GitHub.