risingwavelabs/risingwave · error · ConnectorError

unsupported postgres type: {}

Error message

unsupported postgres type: {}

What it means

`pg_type_to_rw_type` maps Postgres column types to RisingWave `DataType`s when parsing schema (including schema changes). `POINT_ARRAY` has an explicit error arm because Debezium does not implement array-of-point schema conversion, so RisingWave cannot mirror it. The error is a deliberate 'known unsupported' case, separate from the generic fallback arm.

Source

Thrown at src/connector/src/source/cdc/external/postgres.rs:975

        PgType::NUMERIC_ARRAY => DataType::Decimal.list(),
        PgType::VARCHAR_ARRAY => DataType::Varchar.list(),
        PgType::TEXT_ARRAY => DataType::Varchar.list(),
        PgType::BYTEA_ARRAY => DataType::Bytea.list(),
        PgType::DATE_ARRAY => DataType::Date.list(),
        PgType::TIME_ARRAY => DataType::Time.list(),
        PgType::TIMESTAMP_ARRAY => DataType::Timestamp.list(),
        PgType::TIMESTAMPTZ_ARRAY => DataType::Timestamptz.list(),
        PgType::INTERVAL_ARRAY => DataType::Interval.list(),
        PgType::JSON_ARRAY => DataType::Jsonb.list(),
        PgType::JSONB_ARRAY => DataType::Jsonb.list(),
        PgType::UUID_ARRAY => DataType::Varchar.list(),
        PgType::OID => DataType::Int64,
        PgType::OID_ARRAY => DataType::Int64.list(),
        PgType::MONEY_ARRAY => DataType::Decimal.list(),
        // Debezium does not implement POINT_ARRAY schema conversion.
        // https://github.com/debezium/debezium/blob/main/debezium-connector-postgres/src/main/java/io/debezium/connector/postgresql/PostgresValueConverter.java#L339-L348
        PgType::POINT_ARRAY => {
            return Err(anyhow::anyhow!("unsupported postgres type: {}", pg_type).into());
        }
        _ => {
            return Err(anyhow::anyhow!("unsupported postgres type: {}", pg_type).into());
        }
    };
    Ok(data_type)
}

#[cfg(test)]
mod tests {
    use std::cmp::Ordering;
    use std::collections::HashMap;

    use futures::pin_mut;
    use futures_async_stream::for_await;
    use maplit::{convert_args, hashmap};
    use risingwave_common::catalog::{ColumnDesc, ColumnId, Field, Schema};
    use risingwave_common::row::OwnedRow;

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Store points as a different representation, e.g. `TEXT`, `JSONB`, or two `DOUBLE PRECISION` columns.
  2. Exclude the unsupported column from the CDC table if possible (view or narrower table).
  3. Handle the schema-change event by ignoring/dropping the column upstream.
  4. Await/impl Debezium support for POINT_ARRAY and extend the mapping in `pg_type_to_rw_type`.

Example fix

// before
ALTER TABLE places ADD COLUMN vertices POINT[];
// after
ALTER TABLE places ADD COLUMN vertices JSONB;
Defensive patterns

Strategy: validation

Validate before calling

-- Ensure no POINT[] columns exist before enabling CDC on a Postgres table
SELECT column_name FROM information_schema.columns
 WHERE table_schema = ? AND table_name = ? AND udt_name = 'point';

Try / catch

match pg_type_to_rw_type(pg_type) {
    Err(e) if e.to_string().contains("unsupported postgres type") => {
        // skip or remap the column, or abort schema parsing deliberately
    },
    r => r,
}

Prevention

When it happens

Trigger: Calling `pg_type_to_rw_type` (via `parse_schema_change`) on a table column of Postgres type `POINT[]`, or a schema-change event introducing such a column.

Common situations: CDC-enabled Postgres tables using PostGIS/geometry point arrays; adding a `POINT[]` column during a cdc source's lifetime; upstream applications storing coordinates as arrays of points.

Related errors


AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11). Data as JSON: /api/errors/7906a4da7839523e. Report an issue: GitHub.