{"record":{"id":"f372f00df440a736","repo":"risingwavelabs/risingwave","slug":"turbopuffer-namespace-column-not-found-in-sin","errorCode":null,"errorMessage":"Turbopuffer namespace_column '{}' not found in sink schema","messagePattern":"Turbopuffer namespace_column '(.+?)' not found in sink schema","errorType":"validation","errorClass":"SinkError::Config","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/turbopuffer.rs","lineNumber":185,"sourceCode":"                    \"Turbopuffer document id column must be an integer or varchar, got {:?}\",\n                    data_type\n                )));\n            }\n        };\n        let config = TurbopufferConfig::from_btreemap(param.properties)?;\n\n        let namespace = match (&config.namespace, &config.namespace_column) {\n            (Some(namespace), None) => {\n                validate_namespace(namespace)?;\n                TurbopufferNamespace::Static(namespace.clone())\n            }\n            (None, Some(namespace_column)) => {\n                let index = schema\n                    .fields()\n                    .iter()\n                    .position(|field| field.name == *namespace_column)\n                    .ok_or_else(|| {\n                        SinkError::Config(anyhow!(\n                            \"Turbopuffer namespace_column '{}' not found in sink schema\",\n                            namespace_column\n                        ))\n                    })?;\n                if schema[index].data_type != DataType::Varchar {\n                    return Err(SinkError::Config(anyhow!(\n                        \"Turbopuffer namespace_column must be varchar, got {:?}\",\n                        schema[index].data_type\n                    )));\n                }\n                TurbopufferNamespace::Dynamic { index }\n            }\n            (Some(_), Some(_)) => {\n                return Err(SinkError::Config(anyhow!(\n                    \"Turbopuffer sink requires only one of namespace or namespace_column\"\n                )));\n            }\n            (None, None) => {","sourceCodeStart":167,"sourceCodeEnd":203,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/turbopuffer.rs#L167-L203","documentation":"Raised in TryFrom<SinkParam> when namespace_column is set but no field with that name exists in the sink schema. The sink resolves the per-row namespace from this column, so a typo or a dropped/renamed column makes the namespace resolution fail and sink creation is aborted.","triggerScenarios":"CREATE SINK with connector='turbopuffer' and namespace_column='x' where the sink schema has no column literally named 'x' (typo, case mismatch, or column dropped upstream).","commonSituations":"Typo in column name; renamed column in the MV; case-sensitivity mismatch (e.g. 'Namespace' vs 'namespace').","solutions":["Correct namespace_column to match an existing VARCHAR column name exactly","Add/derive a varchar namespace column in the upstream materialized view","Remove namespace_column if a single fixed namespace via the namespace option suffices"],"exampleFix":"// before\nWITH (connector='turbopuffer', namespace_column = 'tenant')  -- column is 'tenant_id'\n// after\nWITH (connector='turbopuffer', namespace_column = 'tenant_id')","handlingStrategy":"validation","validationCode":"if (props.namespace_column && !schema.columns.some(c => c.name === props.namespace_column)) throw new Error('namespace_column not in schema')","typeGuard":"const hasColumn = (schema, name) => schema.columns?.some(c => c.name === name && c.type === 'Varchar');","tryCatchPattern":"catch (SinkError::Config(e)) if e.contains('namespace_column') { correct the column name and retry }","preventionTips":["Verify exact column names (case-sensitive) before CREATE SINK","Keep upstream column renames in sync with sink options","Prefer a fixed namespace option when a per-row column isn't needed"],"tags":["turbopuffer","config","schema","column-not-found"],"backgroundTag":"entity-not-found","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}