{"record":{"id":"befa9c2b58f6f2ef","repo":"t8y2/dbx","slug":"invalid-attribute-number-q-befa9c","errorCode":null,"errorMessage":"invalid attribute number %q","messagePattern":"invalid attribute number %q","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agents/drivers/vastbase-go/vastbase_metadata.go","lineNumber":1713,"sourceCode":"\t\tif err := rows.Scan(&number, &name); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tresult[number] = name\n\t}\n\treturn result, rows.Err()\n}\n\nfunc parseVastbaseConstraintAttributeNumbers(raw string) ([]int, error) {\n\tvalue := strings.TrimSpace(strings.Trim(raw, \"{}[]\"))\n\tif value == \"\" {\n\t\treturn []int{}, nil\n\t}\n\tparts := strings.FieldsFunc(value, func(r rune) bool { return r == ',' || r == ' ' || r == '\\t' })\n\tresult := make([]int, 0, len(parts))\n\tfor _, part := range parts {\n\t\tnumber, err := strconv.Atoi(strings.TrimSpace(part))\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid attribute number %q\", part)\n\t\t}\n\t\tresult = append(result, number)\n\t}\n\treturn result, nil\n}\n\nfunc parseVastbaseConstraintValue(raw any) string {\n\tif raw == nil {\n\t\treturn \"\"\n\t}\n\tif bytes, ok := raw.([]byte); ok {\n\t\treturn strings.ToLower(strings.TrimSpace(string(bytes)))\n\t}\n\treturn strings.ToLower(strings.TrimSpace(fmt.Sprint(raw)))\n}\n\nfunc parseVastbaseConstraintValid(raw any) bool {\n\tif value, ok := raw.(bool); ok {","sourceCodeStart":1695,"sourceCodeEnd":1731,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/agents/drivers/vastbase-go/vastbase_metadata.go#L1695-L1731","documentation":"parseVastbaseConstraintAttributeNumbers splits a constraint's attribute-number text (conkey/confkey) on commas, spaces and tabs and converts each token with strconv.Atoi. Any token that isn't a plain integer produces 'invalid attribute number %q' with the offending token quoted.","triggerScenarios":"A constraint catalog value contains a non-numeric token after splitting — e.g. '1 2 x', an empty segment producing weird tokens after normalization, or locale/encoding artifacts in the catalog text.","commonSituations":"Server builds storing attribute arrays in a different textual format than expected; corrupted catalog rows; copying constraints across systems via dumps that altered the representation.","solutions":["Locate the offending value: SELECT conkey/confkey from the catalog for the constraint being introspected and inspect the raw text.","If the data is genuinely corrupt, recreate the constraint (DROP/ADD CONSTRAINT) to regenerate catalog values.","Check driver/server version compatibility; format expectations may need a driver update.","Trim or normalize the stored text if it contains stray characters, then retry."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"func validAttrNumbers(s string) bool {\n    for _, tok := range strings.FieldsFunc(s, func(r rune) bool { return r == ',' || r == ' ' || r == '\\t' }) {\n        if _, err := strconv.Atoi(tok); err != nil { return false }\n    }\n    return true\n}","typeGuard":null,"tryCatchPattern":"if err != nil && strings.Contains(err.Error(), \"invalid attribute number\") {\n    // extract quoted token from error, dump the raw catalog value for diagnosis\n    return diagnoseConstraintColumns(err)\n}","preventionTips":["Verify catalog attribute-array formats after server upgrades.","Recreate constraints with corrupt catalog data.","Keep the driver matched to the server version."],"tags":["vastbase","metadata","parsing"],"backgroundTag":"constraint-column-parse-failed","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"}