influxdata/influxdb · error · CatalogError

' ' is a reserved column

Error message

'{0}' is a reserved column

What it means

CatalogError::ReservedColumn is thrown when attempting to create a table that defines a column using a name reserved by the system, such as the intrinsic 'time' column. The catalog rejects the table definition so its internal columns are never shadowed (raised from TableDefinition creation, e.g. influxdb3_catalog/src/catalog/versions/v2.rs:3301).

Solutions

  1. Rename the column to a non-reserved name (e.g. 'event_time') in the table definition.
  2. Remove the column from the definition — the intrinsic 'time' column exists automatically and need not be declared.
  3. If importing data, map the source's reserved-name column onto an allowed column name during ingestion.

Example fix

// before
{"table": "cpu", "columns": [{"name": "time", "type": "string"}, {"name": "host", "type": "tag"}]}
// after
{"table": "cpu", "columns": [{"name": "event_time", "type": "string"}, {"name": "host", "type": "tag"}]}
Defensive patterns

Strategy: validation

Validate before calling

const RESERVED = new Set(["time"]);
function assertNoReservedColumns(columns) {
  const bad = columns.filter(c => RESERVED.has(c.name.toLowerCase()));
  if (bad.length) throw new Error(`reserved column names: ${bad.map(c => c.name)}`);
}

Type guard

const isReserved = (name) => ["time"].includes(name.toLowerCase());

Prevention

When it happens

Trigger: Calling create-table (or the /api/v3/configure/table API) with a column named 'time' (or another reserved name) in its column list.

Common situations: Auto-generating schemas from CSV/Parquet headers that contain a 'time' column; porting schemas from other databases where 'time' is an ordinary identifier; ORM-generated table definitions.

Related errors


AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19). Data as JSON: /api/errors/f64eeeda0b9d0437. Report an issue: GitHub.

Appendix: source

Thrown at influxdb3_catalog/src/error.rs:97

    InvalidDistinctCacheColumnType,

    #[error("only uint64, int64, bool, tag, and string columns are supported in the last cache")]
    InvalidLastCacheKeyColumnType,

    #[error("plugin trigger is already enabled")]
    TriggerAlreadyEnabled,

    #[error("plugin trigger is already disabled")]
    TriggerAlreadyDisabled,

    #[error("invalid column type for column '{column_name}', expected {expected}, got {got}")]
    InvalidColumnType {
        column_name: Arc<str>,
        expected: InfluxColumnType,
        got: InfluxColumnType,
    },

    #[error("'{0}' is a reserved column")]
    ReservedColumn(Arc<str>),

    #[error(
        "table '{table_name}' is not defined in database '{db_name}', which uses explicit schemas; \
         create the table with the /api/v3/configure/table API before writing to it"
    )]
    UndeclaredTable {
        db_name: Arc<str>,
        table_name: Arc<str>,
    },

    #[error(
        "column '{column_name}' ({column_type}) is not defined in table '{table_name}' of \
         database '{db_name}', which uses explicit schemas; add the column with the \
         /api/v3/configure/table API before writing to it"
    )]
    UndeclaredColumn {
        db_name: Arc<str>,

View on GitHub (pinned to 06200ef96b)