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

  1. 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.
  2. 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.
  3. 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

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


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)