influxdata/influxdb · error
unsupported data type in catalog
Error message
unsupported data type in catalog {other:?} What it means
This panic comes from `From<DataType> for InfluxFieldType` in the catalog snapshot v1 code. `InfluxFieldType` only models the classic InfluxDB field types (Boolean, Integer, UInteger, Float, String); any other catalog `DataType` (e.g. Time, Bin, or the newer type variants) triggers `unimplemented!("unsupported data type in catalog {other:?}")`, which panics and includes the offending type in the message. It marks the gap between the catalog's richer type model and the legacy field-type model.
Solutions
- Check the panic message's `{other:?}` to identify the unsupported `DataType` variant, then change the schema/column to one of Bool, I64, U64, F64, or Str.
- Ensure the catalog snapshot files were written by a compatible InfluxDB3 version, or migrate them so all column types map to the five supported field types.
- If you maintain the code, extend `From<DataType> for InfluxFieldType` (and its `&DataType` twin below) to map the new variants, or return a descriptive error instead of `unimplemented!()`.
Example fix
// before
other => unimplemented!("unsupported data type in catalog {other:?}"),
// after
DataType::Time(unit, tz) => Self::String, // or map appropriately
other => return Err(CatalogError::UnsupportedFieldType(other.clone())), Defensive patterns
Strategy: validation
Validate before calling
fn is_influx_field_type(dt: &DataType) -> bool {
matches!(
dt,
DataType::Bool | DataType::I64 | DataType::U64 | DataType::F64 | DataType::Str
)
}
// assert!(is_influx_field_type(&column_type)) before From::<InfluxFieldType> Type guard
fn is_field_convertible(dt: &DataType) -> bool {
matches!(
dt,
DataType::Bool | DataType::I64 | DataType::U64 | DataType::F64 | DataType::Str
)
} Prevention
- Only convert columns of type Bool/I64/U64/F64/Str into InfluxFieldType.
- Check catalog snapshot version compatibility before loading files written by newer versions.
- Read the panic's `{other:?}` debug output to pinpoint the offending variant quickly.
- Keep both `From<DataType>` and `From<&DataType>` for InfluxFieldType in sync when adding variants.
When it happens
Trigger: Converting a catalog `DataType` that is not Bool/I64/U64/F64/Str into `InfluxFieldType` — e.g. a tag/table column typed as `DataType::Time(..)`, `DataType::Bin`, `DataType::I8`, `DataType::F16`, or any snapshot type added without updating this conversion.
Common situations: Opening or loading a catalog snapshot written by a newer InfluxDB3 version whose `DataType` enum gained variants; a column typed as timestamp or binary being converted to an Influx field type; tests exercising all `DataType` variants.
Related errors
- column id in series key should be valid
- auto field family exists
- By the point that we're doing partitioning, we should've…
- cannot add column because it already exists with type
- database should exist by id
AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19).
Data as JSON: /api/errors/58327fe5269a5e1d.
Report an issue: GitHub.
Appendix: source
Thrown at influxdb3_catalog/src/snapshot/versions/v1.rs:305
}
}
}
// NOTE: Ideally, we will remove the need for the InfluxFieldType, and be able
// to use Arrow's DataType directly. If that happens, this conversion will need
// to support the entirety of Arrow's DataType enum, which is why [`DataType`]
// has been defined to mimic the Arrow type.
//
// See <https://github.com/influxdata/influxdb_iox/issues/11111>
impl From<DataType> for InfluxFieldType {
fn from(data_type: DataType) -> Self {
match data_type {
DataType::Bool => Self::Boolean,
DataType::I64 => Self::Integer,
DataType::U64 => Self::UInteger,
DataType::F64 => Self::Float,
DataType::Str => Self::String,
other => unimplemented!("unsupported data type in catalog {other:?}"),
}
}
}
impl From<&DataType> for InfluxFieldType {
fn from(data_type: &DataType) -> Self {
match data_type {
DataType::Bool => Self::Boolean,
DataType::I64 => Self::Integer,
DataType::U64 => Self::UInteger,
DataType::F64 => Self::Float,
DataType::Str => Self::String,
other => unimplemented!("unsupported data type in catalog {other:?}"),
}
}
}
#[cfg(test)]View on GitHub (pinned to 06200ef96b)