{"record":{"id":"84b1400db1cb28ff","repo":"risingwavelabs/risingwave","slug":"data-type-is-not-supported","errorCode":null,"errorMessage":"{:?} data type is not supported","messagePattern":"(.+?) data type is not supported","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/connector/src/connector_common/postgres.rs","lineNumber":724,"sourceCode":"        | SeaType::MacAddr8\n        | SeaType::Int4Range\n        | SeaType::Int8Range\n        | SeaType::NumRange\n        | SeaType::TsRange\n        | SeaType::TsTzRange\n        | SeaType::DateRange\n        | SeaType::Enum(_) => DataType::Varchar,\n        SeaType::Line\n        | SeaType::Lseg\n        | SeaType::Box\n        | SeaType::Path\n        | SeaType::Polygon\n        | SeaType::Circle\n        | SeaType::Bit(_)\n        | SeaType::VarBit(_)\n        | SeaType::TsVector\n        | SeaType::TsQuery => {\n            bail!(\"{:?} data type is not supported\", col_type);\n        }\n        SeaType::Unknown(name) => {\n            if let Some(dim) = parse_pgvector_dimension(name)? {\n                DataType::Vector(dim)\n            } else if matches!(name.to_ascii_lowercase().as_str(), \"geometry\" | \"geography\") {\n                DataType::Bytea\n            } else {\n                // NOTES: user-defined enum type is classified as `Unknown`\n                tracing::warn!(\"unknown PostgreSQL data type `{name}`; mapping it to varchar\");\n                DataType::Varchar\n            }\n        }\n    };\n\n    Ok(dtype)\n}\n\nfn parse_pgvector_dimension(type_name: &str) -> ConnectorResult<Option<usize>> {","sourceCodeStart":706,"sourceCodeEnd":742,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/connector_common/postgres.rs#L706-L742","documentation":"The PostgreSQL connector does not map every Postgres type to a RisingWave type. `sea_type_to_rw_type` bails with '{:?} data type is not supported' for geometric types (Point, Polygon, Circle), Bit/VarBit, TsVector, TsQuery, and other unmapped types when discovered in the source table.","triggerScenarios":"`sea_type_to_rw_type` (called from `connect` or recursively for array elements) receiving a column whose SeaType falls into the unsupported match arm — e.g. a column of type `point`, `tsvector`, `bit(8)`, or `varbit`.","commonSituations":"CDC on a table containing Postgres full-text search columns (tsvector/tsquery), geometry via built-in types rather than PostGIS, bit-string columns, or custom enum types not handled by discovery.","solutions":["Drop or move unsupported columns to a separate table not consumed by RisingWave","Cast unsupported columns to supported types in a view (e.g. `bit_col::text`) and CDC from the view where applicable","For PostGIS `geometry`/`geography`, keep the name-based mapping which maps them to BYTEA (do not rename to an unmapped type)","Track/upvote support for the specific type in RisingWave"],"exampleFix":"-- before\nCREATE TABLE docs (body tsvector);\n-- after\nCREATE TABLE docs (body_text text); -- or cast in a view: body::text AS body_ts","handlingStrategy":"type-guard","validationCode":"const UNSUPPORTED: &[&str] = &[\"point\",\"polygon\",\"circle\",\"bit\",\"varbit\",\"tsvector\",\"tsquery\"];\nfn check_pg_columns(cols: &[(String, String)]) -> Result<(), String> {\n    for (name, ty) in cols {\n        let base = ty.split('(').next().unwrap_or(ty).trim().to_ascii_lowercase();\n        if UNSUPPORTED.contains(&base.as_str()) {\n            return Err(format!(\"column {name} uses unsupported type {ty}\"));\n        }\n    }\n    Ok(())\n}","typeGuard":"fn is_supported_pg_type(ty: &str) -> bool {\n    let base = ty.split('(').next().unwrap_or(ty).trim().to_ascii_lowercase();\n    !(\"point\" | \"polygon\" | \"circle\" | \"bit\" | \"varbit\" | \"tsvector\" | \"tsquery\").matches(base)\n}","tryCatchPattern":"match sea_type_to_rw_type(&ty) {\n    Err(e) if e.to_string().contains(\"data type is not supported\") => {\n        // exclude the column, CDC from a view casting it to text, or fail the plan with guidance\n        plan.exclude_column(col_name, e);\n    }\n    r => r?,\n}","preventionTips":["Audit source tables for tsvector/tsquery/bit/geometry columns before CDC","Use PostGIS-aware planning: geometry/geography map to BYTEA, but built-in geometric types do not map","Cast unsupported columns to text in an upstream view"],"tags":["postgres","type-mapping","unsupported-type","cdc"],"backgroundTag":"unsupported-dtype","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}