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

  1. Use a valid primitive type name (text, int, number, boolean, date, geoCoordinates, blob, uuid, etc.)
  2. For references, ensure the dataType entry exactly matches an existing class name (uppercase first letter)
  3. Check for legacy type names like "string" and migrate them to "text" where appropriate
  4. 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

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


AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04). Data as JSON: /api/errors/d9fcb4bac0b6a1bd. Report an issue: GitHub.