weaviate/weaviate · error
unknown primitive data type '%s'
Error message
unknown primitive data type '%s'
What it means
After failing to match the dataType against known primitives and enum types, the resolver checks whether it is a reference (class) type. If it is not a recognized reference data type either, the value is simply not a data type this schema knows, and the resolver returns this error.
Source
Thrown at entities/schema/data_types.go:269
return &propertyDataType{
kind: PropertyKindPrimitive,
primitiveType: dt,
}, nil
}
}
for _, dt := range NestedDataTypes {
if dataType[0] == dt.String() {
return &propertyDataType{
kind: PropertyKindNested,
nestedType: dt,
}, nil
}
}
if len(dataType[0]) == 0 {
return nil, fmt.Errorf("dataType cannot be an empty string")
}
if !IsRefDataType(dataType) {
return nil, fmt.Errorf("unknown primitive data type '%s'", dataType[0])
}
}
/* implies len(dataType) > 1, or first element is a class already */
var classes []ClassName
for _, someDataType := range dataType {
className, err := ValidateQualifiedClassName(someDataType)
if err != nil {
return nil, err
}
if beloningToClass != className {
class, err := authorizedGetClass(className.String())
if err != nil {
return nil, err
}
if !relaxCrossRefValidation && class == nil {View on GitHub (pinned to 75aa4b6d11)
Solutions
- Use a valid primitive type name (text, int, number, boolean, date, geoCoordinates, blob, uuid, etc.)
- For references, ensure the dataType entry exactly matches an existing class name (uppercase first letter)
- Check for legacy type names like "string" and migrate them to "text" where appropriate
- GET /v1/schema to confirm the referenced class exists
Example fix
// before
Property{"name": "body", "dataType": []string{"string"}}
// after
Property{"name": "body", "dataType": []string{"text"}} Defensive patterns
Strategy: validation
Validate before calling
var knownPrimitives = map[string]bool{
"text": true, "int": true, "number": true, "boolean": true,
"date": true, "dateWithNano": true, "geoCoordinates": true,
"blob": true, "uuid": true, "phoneNumber": true, "object": true,
}
func validDataTypeName(dt string, classes map[string]bool) bool {
return knownPrimitives[dt] || classes[dt]
} Try / catch
pdt, err := schema.FindPropertyDataTypeWithRefs(prop.DataType, resolver)
if err != nil {
return fmt.Errorf("property %q has unknown dataType %v: %w", prop.Name, prop.DataType, err)
} Prevention
- Keep a client-side list of valid primitive type names
- Migrate legacy "string" dataType to "text"
- Create referenced classes before referencing them in dataType
- Validate dataType against GET /v1/schema before submitting
When it happens
Trigger: Passing a dataType string that is neither a primitive (text, int, number, boolean, date, geoCoordinates, blob, etc.), a known enum, nor a reference to an existing class — e.g. dataType: ["string"] (removed/renamed primitive) or a typo like ["txet"].
Common situations: Migrating from older Weaviate versions where "string" and "text" had different semantics and the wrong one is sent; typos in dataType; referencing a target class that was never created (for cross-refs the class name must match); auto-generated clients using an outdated type list.
Related errors
- dataType cannot be an empty string
- unknown datatype for aggregation type reference: ${dataType}
- %w: resolve classes: %w
- empty class
- vector %q: cannot create a new class with vectorIndexType %q
AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04).
Data as JSON: /api/errors/d9fcb4bac0b6a1bd.
Report an issue: GitHub.