{"record":{"id":"72a151d2579bf1ac","repo":"t8y2/dbx","slug":"failed-to-parse-constraint-s-columns-w-72a151","errorCode":null,"errorMessage":"failed to parse constraint %s columns: %w","messagePattern":"failed to parse constraint (.+?) columns: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agents/drivers/vastbase-go/vastbase_metadata.go","lineNumber":1585,"sourceCode":"\n\ttype rawConstraint struct {\n\t\tname, kind, definition                        string\n\t\tcolumnNumbers, refColumnNumbers               []int\n\t\trefSchema, refTable                           sql.NullString\n\t\tmatchType, onUpdate, onDelete                 sql.NullString\n\t\tdeferrable, initiallyDeferred, valid, enabled bool\n\t}\n\traw := []rawConstraint{}\n\tfor rows.Next() {\n\t\tvar item rawConstraint\n\t\tvar columnsRaw, refColumnsRaw sql.NullString\n\t\tvar validRaw, enabledRaw any\n\t\tif err := rows.Scan(&item.name, &item.kind, &item.definition, &columnsRaw, &item.refSchema, &item.refTable, &refColumnsRaw, &item.matchType, &item.onUpdate, &item.onDelete, &item.deferrable, &item.initiallyDeferred, &validRaw, &enabledRaw); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\titem.columnNumbers, err = parseVastbaseConstraintAttributeNumbers(columnsRaw.String)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to parse constraint %s columns: %w\", item.name, err)\n\t\t}\n\t\titem.refColumnNumbers, err = parseVastbaseConstraintAttributeNumbers(refColumnsRaw.String)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to parse constraint %s referenced columns: %w\", item.name, err)\n\t\t}\n\t\titem.valid = parseVastbaseConstraintValid(validRaw)\n\t\titem.enabled = parseVastbaseConstraintEnabled(enabledRaw)\n\t\traw = append(raw, item)\n\t}\n\tif err := rows.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tattributes, err := s.relationAttributesByNumber(catalog, prefix, effective, table)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\trefAttributes := map[string]map[int]string{}","sourceCodeStart":1567,"sourceCodeEnd":1603,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/agents/drivers/vastbase-go/vastbase_metadata.go#L1567-L1603","documentation":"While reading table constraints from the catalog, the driver parses the constraint's own column list (stored as attribute-number text like '1 2 3') via parseVastbaseConstraintAttributeNumbers. If that parse fails (non-numeric token after splitting on commas/spaces/tabs), the error is wrapped as 'failed to parse constraint %s columns'.","triggerScenarios":"Introspecting constraints when a constraint row's conkey column contains an unexpected format — e.g. empty string, NULL rendered oddly, or a value with characters other than digits, commas, spaces, or tabs.","commonSituations":"Non-standard Vastbase/PG-compatible server whose catalog text representation differs; corrupted or unusual catalog rows; driver version mismatch with server catalog format.","solutions":["Inspect the constraint named in the error and its catalog conkey value; check for empty/malformed data.","Confirm the server version is supported by the driver; upgrade the driver if catalog formats changed.","If the value is legitimately empty (e.g. NOT NULL constraints have no conkey), the driver may need updating to skip empty values.","Query the constraint directly (SELECT conkey FROM pg_constraint WHERE conname=...) to diagnose the raw value."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// sanity-check conkey text before/during introspection\nvar conkey string\nerr := db.QueryRow(`SELECT conkey::text FROM pg_constraint WHERE conname=$1`, cname).Scan(&conkey)\nif err == nil {\n    for _, tok := range strings.FieldsFunc(conkey, func(r rune) bool { return r == ',' || r == ' ' || r == '\\t' }) {\n        if _, e := strconv.Atoi(tok); e != nil {\n            return fmt.Errorf(\"malformed conkey %q for constraint %s\", conkey, cname)\n        }\n    }\n}","typeGuard":null,"tryCatchPattern":"cols, err := srv.ListConstraints(schema, table)\nif err != nil && strings.Contains(err.Error(), \"failed to parse constraint\") {\n    // log constraint name from error and inspect its catalog row\n    return fmt.Errorf(\"introspection blocked by malformed constraint data: %w\", err)\n}","preventionTips":["Pin supported driver/server version pairs.","Spot-check conkey values after major server upgrades.","Avoid dumping/restoring constraints through non-standard tooling."],"tags":["vastbase","metadata","parsing","constraints"],"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-14T05:17:10.506Z"}