{"record":{"id":"12a745e4ae288187","repo":"risingwavelabs/risingwave","slug":"pgvector-dimension-out-of-range-in-type-expe","errorCode":null,"errorMessage":"pgvector dimension out of range in type `{}`: expect 1..={}","messagePattern":"pgvector dimension out of range in type `(.+?)`: expect 1\\.\\.=(.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/connector/src/connector_common/postgres.rs","lineNumber":760,"sourceCode":"fn parse_pgvector_dimension(type_name: &str) -> ConnectorResult<Option<usize>> {\n    let normalized = type_name.trim().to_ascii_lowercase();\n    if normalized == \"vector\" {\n        bail!(\"pgvector type `vector` is missing dimension, expected `vector(n)`\")\n    }\n    if !normalized.starts_with(\"vector(\") || !normalized.ends_with(')') {\n        return Ok(None);\n    }\n\n    let dim_text = normalized\n        .trim_start_matches(\"vector(\")\n        .trim_end_matches(')')\n        .trim();\n    let dim = dim_text\n        .parse::<usize>()\n        .map_err(|_| anyhow!(\"invalid pgvector dimension in type `{type_name}`\"))?;\n\n    if !(1..=DataType::VEC_MAX_SIZE).contains(&dim) {\n        bail!(\n            \"pgvector dimension out of range in type `{}`: expect 1..={}\",\n            type_name,\n            DataType::VEC_MAX_SIZE\n        );\n    }\n\n    Ok(Some(dim))\n}\n\n// Used for sink connector\n// We use `sea-schema` for table schema discovery.\n// So we have to map `sea-schema` pg types\n// to `tokio-postgres` pg types (which we use for query binding).\nfn sea_type_to_pg_type(sea_type: &SeaType) -> ConnectorResult<tokio_postgres::types::Type> {\n    use tokio_postgres::types::Type as PgType;\n    match sea_type {\n        SeaType::SmallInt => Ok(PgType::INT2),\n        SeaType::Integer => Ok(PgType::INT4),","sourceCodeStart":742,"sourceCodeEnd":778,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/connector_common/postgres.rs#L742-L778","documentation":"After parsing the pgvector dimension, `parse_pgvector_dimension` range-checks it against RisingWave's vector size limit (`DataType::VEC_MAX_SIZE`). Dimensions below 1 or above the max bail with 'pgvector dimension out of range'.","triggerScenarios":"`parse_pgvector_dimension` seeing `vector(n)` where n = 0 or n > `DataType::VEC_MAX_SIZE` (RisingWave's maximum vector dimension).","commonSituations":"Upstream pgvector columns with very large dimensions (e.g. `vector(20000)`) that exceed RisingWave's limit; accidentally declared zero-dimension vectors.","solutions":["Reduce the upstream column dimension to a supported value (1..=VEC_MAX_SIZE, e.g. 1536 or 4096)","Check RisingWave's current max vector dimension in `DataType::VEC_MAX_SIZE` and size the embedding model output accordingly","Split or truncate embeddings upstream before storing them in a monitored column"],"exampleFix":"-- before\nCREATE TABLE t (v vector(16000));\n-- after\nCREATE TABLE t (v vector(1536));","handlingStrategy":"validation","validationCode":"fn check_vector_dim(dim: usize, max: usize) -> Result<(), String> {\n    if (1..=max).contains(&dim) { Ok(()) } else { Err(format!(\"dim {dim} outside 1..={max}\")) }\n}\n// call with max = DataType::VEC_MAX_SIZE before setup","typeGuard":"fn dim_in_range(type_name: &str, max: usize) -> bool {\n    let inner = type_name.trim().to_ascii_lowercase();\n    inner.starts_with(\"vector(\") && inner.ends_with(')')\n        && inner[\"vector(\".len()..inner.len()-1].trim().parse::<usize>()\n            .map(|d| (1..=max).contains(&d)).unwrap_or(false)\n}","tryCatchPattern":"match setup_result {\n    Err(e) if e.to_string().contains(\"dimension out of range\") => {\n        Err(CdcError::PgVectorDimTooLarge(e))\n    }\n    other => other,\n}","preventionTips":["Check DataType::VEC_MAX_SIZE and size embeddings accordingly","Use common embedding dimensions (384, 768, 1536) that fit the limit","Add a range check on vector columns to upstream schema validation"],"tags":["postgres","pgvector","vector","range"],"backgroundTag":"value-out-of-range","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"}