{"record":{"id":"f2afd2327065e874","repo":"cocoindex-io/cocoindex","slug":"vectorspecprovider-is-only-supported-for-numpy-nda","errorCode":null,"errorMessage":"VectorSpecProvider is only supported for NumPy ndarray type. Got type: {python_type}","messagePattern":"VectorSpecProvider is only supported for NumPy ndarray type\\. Got type: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/cocoindex/connectors/postgres/_target.py","lineNumber":298,"sourceCode":"    # Check direct leaf type mappings\n    if base_type in _LEAF_TYPE_MAPPINGS:\n        return _LEAF_TYPE_MAPPINGS[base_type]\n\n    # NumPy ndarray: map to pgvector type bases; dimension is handled at the schema layer.\n    if base_type is np.ndarray:\n        if vector_schema is None:\n            raise ValueError(\"VectorSpecProvider is required for NumPy ndarray type.\")\n        if vector_schema.size <= 0:\n            raise ValueError(f\"Invalid pgvector dimension: {vector_schema.size}\")\n\n        # Default to `vector` (float32/float64/int64/etc.). Use `halfvec` for float16.\n        base = \"halfvec\" if vector_schema.dtype in (np.half, np.float16) else \"vector\"\n        return _TypeMapping(\n            pg_type=f\"{base}({vector_schema.size})\", encoder=_vector_encoder\n        )\n\n    elif vector_schema is not None:\n        raise ValueError(\n            f\"VectorSpecProvider is only supported for NumPy ndarray type. Got type: {python_type}\"\n        )\n\n    # Complex types that need JSON encoding\n    if isinstance(\n        type_info.variant, (SequenceType, MappingType, RecordType, UnionType, AnyType)\n    ):\n        return _JSONB_MAPPING\n\n    # Default fallback\n    return _JSONB_MAPPING\n\n\nclass ColumnDef(NamedTuple):\n    \"\"\"Definition of a table column.\"\"\"\n\n    type: str  # PostgreSQL type (e.g., \"text\", \"bigint\", \"jsonb\", \"vector(384)\")\n    nullable: bool = True","sourceCodeStart":280,"sourceCodeEnd":316,"githubUrl":"https://github.com/cocoindex-io/cocoindex/blob/e84aa99b3292c5270a4b313b2a7137ad9ce8ab3b/python/cocoindex/connectors/postgres/_target.py#L280-L316","documentation":"A VectorSchemaProvider (vector schema) is only meaningful for np.ndarray fields that map to pgvector types. Supplying one for any other column type is contradictory, so _get_type_mapping raises ValueError.","triggerScenarios":"Passing column_overrides={\"title\": VectorSchemaProvider(size=10)} in TableTarget.from_class where the 'title' field is a str (or any non-ndarray type).","commonSituations":"Copy-pasting the vector override entry for all columns; confusing VectorSchemaProvider with a plain PgType override.","solutions":["Remove the VectorSchemaProvider override for non-ndarray columns.","Use a PgType override for plain columns instead.","Keep VectorSchemaProvider only for np.ndarray-typed fields."],"exampleFix":"// before\noverrides = {\"title\": VectorSchemaProvider(size=10), \"embedding\": VectorSchemaProvider(size=768)}\n// after\noverrides = {\"embedding\": VectorSchemaProvider(size=768)}","handlingStrategy":"validation","validationCode":"import numpy as np, typing\nhints = typing.get_type_hints(Row)\nfor name, ov in overrides.items():\n    if isinstance(ov, VectorSchemaProvider):\n        assert hints[name] is np.ndarray, f\"VectorSchemaProvider only valid on ndarray field '{name}'\"","typeGuard":"def vector_overrides_only_on_ndarray(row_type: type, overrides: dict) -> bool:\n    import typing, numpy as np\n    hints = typing.get_type_hints(row_type)\n    return all(\n        hints.get(name) is np.ndarray\n        for name, ov in overrides.items()\n        if isinstance(ov, VectorSchemaProvider)\n    )","tryCatchPattern":"try:\n    target = await PgTableTarget.from_class(Row, primary_key=[\"id\"], column_overrides=ov)\nexcept ValueError as e:\n    if \"only supported for NumPy ndarray\" in str(e):\n        ov = {k: v for k, v in ov.items() if not isinstance(v, VectorSchemaProvider) or k == \"embedding\"}","preventionTips":["Only attach VectorSchemaProvider to np.ndarray-typed fields.","Use PgType overrides for scalar/string columns.","Centralize column_overrides construction so vector entries are added next to embedding fields."],"tags":["python","pgvector","type-mismatch","configuration"],"backgroundTag":"incompatible-source-type","analyzedSha":"e84aa99b3292c5270a4b313b2a7137ad9ce8ab3b","analyzedAt":"2026-09-08T15:59:19.997Z","contentChangedAt":"2026-09-08T15:59:19.997Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}