--- title: "Error index" slug: "dev-vector-search-troubleshooting-errors" description: "Explore common errors in creating, loading, and searching vector-indexed tables, with causes and fixes for ADBC and Python SDK issues." updated: 2026-11-05T15:48:01Z published: 2026-11-05T15:48:01Z canonical: "docs.vastdata.com/dev-vector-search-troubleshooting-errors" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.vastdata.com/llms.txt > Use this file to discover all available pages before exploring further. # Error index *Applies to VAST Cluster 5.5.* The errors you can get when you create, load, change and search vector-indexed tables, with their causes and fixes. Search this page for a distinctive part of your message, such as `must be a vector column` or `Cannot cast`. **How the messages were produced:** every message on this page was captured on a VAST Cluster 5.5 system (5.5.0-SP3 or 5.5.0-SP6) through the VAST Query Engine ADBC driver (`adbc-driver-vastdb` 0.0.32) or the Python SDK 2.1.0, or, for the VMS REST API rows, with `curl`. `<placeholders>` mark values that vary, such as column names and request IDs. ## Reading a Query Engine error ADBC errors from the Query Engine come in two shapes. Look for the text after `failed with:` or `description:`: ``` ... failed with: Binder Error: Vector index column \"name\" must be a vector column, but has type: VARCHAR", request_id: "" } ... description: [req=0x]: internal error: Invalid Argument) ``` (Abridged at `...`.) The first shape names the problem. The second is a rejection by the database with no detail. For `Invalid Argument`, use the "when" column in the tables below to find which change was refused. Python SDK errors are `vastdb.errors.HttpError` subclasses with `code` and `message` fields ([reading an SDK error](/develop/docs/dev-database-troubleshooting-errors#reading-an-sdk-error)). ## Connecting | Message | Cause | Fix | | --- | --- | --- | | `Request GetVersionRequest failed ... error_code: Other("SignatureDoesNotMatch"), message: "The request signature we calculated does not match the signature you provided. Check your AWS secret access key and signing method."` | The secret key is wrong for this access key. | Check `vast.db.secret_key`. See [setup](/develop/docs/dev-vector-search-operations-setup#check-that-it-works). | | `vastdb.transaction.NoAdbcConnectionError: Adbc Driver may not have been supplied` | The SDK's transaction opened without the ADBC driver, and you then called `vector_search()`. | `pip install 'vastdb[adbc]'`. See [VAST DataBase errors](/develop/docs/dev-database-troubleshooting-errors#vector-search-and-adbc). | | `Network error: http://<addr>/?transaction=: Connection Failed: Connect error: Connection refused (os error 111)` | The endpoint URL has the wrong port, or none: the Query Engine answers on the cluster's S3 port, such as `:9090`. | Add the port to `vast.db.endpoint` ([setup](/develop/docs/dev-vector-search-operations-setup#what-you-need)). | | `Query stopped prematurely: Query canceled: Server error (status: 17, description: We encountered an internal error. Please try again.)` on every query, while `CREATE SCHEMA` and `CREATE TABLE` succeed | The cluster has no virtual IP pool with the Query Engine role. Until one exists, DDL works but queries fail on every virtual IP. | Ask your platform team for a Query Engine pool, and connect to it ([setup](/develop/docs/dev-vector-search-operations-setup#what-you-need)). | | `Conflict: {'code': 'InvalidBucketState', 'message': '[req=0x<id>]: This @s3_bucket_name=<bucket> does not support database api - failing request' ... 'status': 409` | Python SDK: the bucket is on an S3-only view, not a Database-enabled view. Through ADBC the same mistake gives only `Catalog Error: Table with name <table> does not exist!` | Use a bucket on a Database-enabled view ([setup](/develop/docs/dev-vector-search-operations-setup#what-you-need)). | | `Binder Error: [req=0x<id>]: permission checking for table: <bucket>/<schema>/<table> failed - AccessDenied.` | ADBC, or the SDK's `vector_search()`: the user's policy doesn't allow `s3:QueryEngine*`. The SDK's own `insert()` and `select()` still work without it. | Ask for `s3:QueryEngine*` ([setup](/develop/docs/dev-vector-search-operations-setup#permissions)). | | `Query Status Keepalive Failure: Get query status request failed. (Request GetQueryStatusRequest(...) failed Server responded with error: ServerErrorResponse { error_code: Other("AccessDenied"), message: "[req=0x<id>]: request was denied according to policies res=2" ...` on every query, even `SELECT 1`, while the SDK's `insert()` and `select()` work | No identity policy applies to your user in your tenant. Usually the policy was attached in the default tenant: for a user of the cluster's default local provider, that's where it goes unless the tenant is named. The SDK's own calls still work for a user that owns the bucket. | Ask your platform team to attach the policy to your user in your tenant: `user modify --tenant-id`, or `PATCH /api/users/<user id>/tenant_data/` with `tenant_id` ([setup](/develop/docs/dev-vector-search-operations-setup#permissions)). | | `AccessDenied ... [req=0x<id>]: login_name=<user> was not found` | The `vast.db.end_user` connection option names a user the cluster doesn't know | Pass the end user's VAST user name ([security](/develop/docs/dev-vector-search-operations-security)). | ## Creating a table | Message | When | Fix | | --- | --- | --- | | `Binder Error: Vector index column "<col>" must be a vector column, but has type: VARCHAR` (or `INTEGER`) | `VECTOR CLUSTER BY` names a column that isn't a vector | Declare the column as `VECTOR(FLOAT, <d>)` (or `VECTOR(FLOAT16, <d>)`) and cluster by it. | | `Binder Error: Vector index column "<col>" must be a vector column, but has type: FLOAT[]` | The column is a list (`FLOAT[]`), not a vector | Use `VECTOR(FLOAT, <d>)`. | | `Binder Error: ARRAY type is not supported in table definitions. Column "<col>" has type: FLOAT[4]` (or `INTEGER[4]`) | A fixed-size array type in `CREATE TABLE` | Use `VECTOR(FLOAT, <d>)` for the column. Fixed-size arrays such as `FLOAT[4]` are for casts in queries, not for columns. | | `Parser Error: Duplicate attribute: 'metric'` | `metric` given twice in `VECTOR CLUSTER BY ... (...)` | Give each option once. | | `Parser Error: syntax error at or near "vector"` | A column named `vector`, unquoted. The word is reserved in the Query Engine. | Rename the column, for example `embedding`. A quoted `"vector"` is accepted, but don't use the name. | | `Parser Error: syntax error at or near "SECONDARY"` or `... near "INCLUDE"` | `SECONDARY INDEX` or `INCLUDE (...)` clauses, which 5.5.0 doesn't support | Remove the clause. Filter with `WHERE` instead ([filters](/develop/docs/dev-vector-search-guides-filters)). | | `internal error: Invalid Argument` | Through SQL: an unknown `metric`, an unknown quantization value (including `rabitq_*`), or the pair `cluster_quantization = 'scalar_8bit'`, `search_quantization = 'none'` | Use `metric` `l2sq`, `cosine` or `ip`, and quantization `none` or `scalar_8bit` with a legal pair ([quantization](/develop/docs/dev-vector-search-guides-quantization)). The SDK messages below say which. | | `BadRequest ... 'code': 'InvalidArgument', 'message': "[req=0x<id>]: search_quantization='none' requires cluster_quantization='none'"` | Python SDK: `VectorIndexSpec(..., cluster_quantization="scalar_8bit", search_quantization="none")` | Use `none`/`none`, `none`/`scalar_8bit` or `scalar_8bit`/`scalar_8bit`. | | `BadRequest ... "[req=0x<id>]: invalid vector index cluster quantization '<value>', supported values: 'none', 'scalar_8bit'"` (or `search quantization`) | Python SDK: an unsupported quantization value, such as `rabitq_4bit` | Use `none` or `scalar_8bit`. | | `BadRequest ... "[req=0x<id>]: invalid vector index distance metric <metric>, supported metrics: 'l2sq', 'ip', 'cosine'"` | Python SDK: an unsupported `distance_metric` | Use `l2sq`, `ip` or `cosine`. The SDK 2.1.0 docstring lists only `l2sq` and `ip`, but the cluster accepts `cosine` too. | | `BadRequest ... "[req=0x<id>]: invalid vector indexed column name <col>"` | Python SDK: `VectorIndexSpec(column=...)` names a column that isn't in the table's schema | Pass the name of the vector column. | | `NotImplemented ... vector indexing cannot be combined with elysium sorting` (or `... with partitioning`) | Python SDK: `create_table()` with a vector index and a sort key or partitions. "Elysium" in the message means sorted tables. | A vector-indexed table can't be sorted or partitioned ([combining table structures](/develop/docs/dev-database-reference-limits#combining-table-structures)). | | `failed to enable vector index eres=106` | Python SDK: `create_table()` with a vector index and user-defined row IDs | The two can't be combined ([combining table structures](/develop/docs/dev-database-reference-limits#combining-table-structures)). | | `BadRequest: {'code': 'InvalidArgument', 'message': '[req=0x<id>]: failed to enable vector index eres=14' ... 'status': 400` | Python SDK: `create_table()` with a vector index and a `vastdb_rowid` column | Don't add `vastdb_rowid` to an indexed table. The failed call still creates the table, without an index: drop it before you try again. | | `{"detail":"2 validation errors for TableInputSchema\nvector_indexes -> 0 -> cluster_quantization\n field required (type=value_error.missing)\nvector_indexes -> 0 -> search_quantization\n field required (type=value_error.missing)"}`, HTTP 400 | VMS REST API `POST /tables/`: a `vector_indexes` entry without the quantization fields (here, both are missing). The REST API has no default quantization. | Send both `cluster_quantization` and `search_quantization` ([CI/CD and automation](/develop/docs/dev-vector-search-operations-ci-cd#fields-and-the-errors-you-get)). | | `{"detail":"1 validation error for TableInputSchema\n__root__\n search_quantization=NONE requires cluster_quantization=NONE (type=value_error)"}`, HTTP 400 | VMS REST API: `SCALAR_8BIT` for clustering with `NONE` for search | Use `NONE`/`NONE`, `NONE`/`SCALAR_8BIT` or `SCALAR_8BIT`/`SCALAR_8BIT` ([CI/CD and automation](/develop/docs/dev-vector-search-operations-ci-cd#fields-and-the-errors-you-get)). | | `[req=0x<id>]: vector dimension 2148 exceeds max supported dimension 2147 for clustering quantization type SCALAR_8BIT due to memory limitations` (or `... 536 for clustering quantization type NONE ...`) | The vector column has more dimensions than the index supports for its cluster quantization: 2,147 for `scalar_8bit`, 536 for `none` | Use `cluster_quantization = 'scalar_8bit'`, or a model with fewer dimensions ([limits](/develop/docs/dev-vector-search-reference-limits#index-rules)). A failed Python SDK `create_table()` can leave a table behind that answers `DROP` with `404 NoSuchKey`; list the schema's tables before you retry. | ## Inserting rows | Message | When | Fix | | --- | --- | --- | | `Conversion Error: Cannot cast array of size 7 to array of size 8` | Inserting a value cast to `FLOAT[7]` into a `VECTOR(FLOAT, 8)` column | Every vector must have exactly the column's dimension. Check the embedding model's output size. | | `Conversion Error: Cannot cast list with length 3 to vector with length 4` | Inserting a list literal, such as `[1.0, 2.0, 3.0]`, of the wrong length | Same as above. | | `Conversion Error: Cannot cast list with NULL values to vector (non-nullable nested type)` | Inserting a list literal that contains a `NULL` element | Remove or replace the missing values before you insert. | | `internal error: Invalid Argument` | Inserting a `NULL` vector, a vector containing `NaN` or infinity, or a `FLOAT16` vector with a value outside the `FLOAT16` range (it would become infinity) | Give every row a vector of finite values, and keep `FLOAT16` values in range, or use `VECTOR(FLOAT, <d>)`. | | `BadRequest: {'code': 'InvalidArgument', 'message': '[req=0x<id>]: vector index column contains non-finite values (has_nan=1 has_inf=0)' ... 'status': 400` | Python SDK `insert()`: a vector containing `NaN` or infinity | Clean the vectors before you insert. | | `Server error (status: 17, description: [req=0x<id>]: [req=0x<id>]: internal error: We encountered an internal error. Please try again.)` | `INSERT` into a table whose indexed column is `VECTOR(INTEGER, <d>)`. The table is created, but rows can't be inserted through SQL. | Use `VECTOR(FLOAT, <d>)` or `VECTOR(FLOAT16, <d>)`. | | `InternalError ... Logical plan is too big: <size> > 4194304` | A multi-row `INSERT ... VALUES` with vector literals: the query plan outgrows its size limit before the statement reaches the 5 MB cap | Insert fewer rows per statement, or load with bulk ingest ([ingest](/develop/docs/dev-vector-search-guides-ingest)). | | `RequestDataTooLarge ... Content_length=<n> is larger than max available buffer cmd=START_QUERY` | The SQL statement is larger than the 5 MB cap ([limits](/develop/docs/dev-database-reference-limits#sizes)) | Same as above. | A `NULL` element inside a value that's explicitly cast, such as `[1, 2, 3, NULL]::FLOAT[4]`, is accepted and stored as `0.0`. Check your vectors for missing values before you load them. ## Changing a table | Message | When | Fix | | --- | --- | --- | | `internal error: Invalid Argument` | `UPDATE` of the vector column | Delete the row and insert it again with the new vector. Updating other columns works. | | `internal error: Invalid Argument` | `ALTER TABLE ... ADD COLUMN` or `DROP COLUMN` on a vector-indexed table | Adding or dropping columns on an indexed table isn't supported in 5.5. Plan the columns before you create the table, or copy into a new table ([move vectors into an indexed table](/develop/docs/dev-vector-search-guides-migrate)). | | `BadRequest ... InvalidArgument ... adding columns on indexed tables is forbidden` (or `dropping columns ...`) | Python SDK: `add_column()` or `drop_column()` on a vector-indexed table | Same as above ([VAST DataBase errors](/develop/docs/dev-database-troubleshooting-errors#vastdberrorsbadrequest-http-400-with-code-invalidargument-adding-columns-on-indexed-tables-is-forbidden)). | | `internal error: Tried to drop a column which cannot be dropped` | `ALTER TABLE ... RENAME COLUMN` on the indexed vector column | The indexed vector column can't be renamed. | ## Searching | Message | When | Fix | | --- | --- | --- | | `AssertionError: Table is either not vector indexed. (maybe try reloading the TableMetadata)` | Python SDK: `vector_search()` on a table without a vector index, or with stale table metadata | Check that the table was created with a vector index. If it was, reopen the table in a new transaction. | | `The operator 'SET' type=69 is currently not supported.` (code `NotImplemented`) | A SQL `SET` statement, for example to change a probe setting | Pass settings as ADBC connection options instead ([configuration](/develop/docs/dev-vector-search-reference-configuration)). | | `The operator 'ORDER_BY' type=1 is currently not supported for this usage.` (code `NotImplemented`) | An `ORDER BY` a distance with no `LIMIT` | Add `LIMIT k`. A search should always have one ([query design](/develop/docs/dev-vector-search-guides-query-design)). | | `Catalog Error: Scalar Function with name cosine_similarity does not exist!` (code `QueryCatalogException`) | SQL copied from a slide or webinar. The Query Engine has no `cosine_similarity` function. | Use `array_cosine_distance(...)` with `ORDER BY ... ASC LIMIT k` ([query design](/develop/docs/dev-vector-search-guides-query-design)). Don't rewrite it as `array_cosine_similarity(...)` with `ORDER BY ... DESC`: that runs, but as a full scan. | | `Binder Error: Referenced column "<col>" not found in FROM clause!` for a column the table has | Column security denies you that column. Denying the vector column blocks every search on the table, including `vector_search()`; denying a payload column blocks any query that selects it. | Ask for access, or select only the columns you're allowed ([security](/develop/docs/dev-vector-search-operations-security)). | | `Permission Error: [req=0x<id>]: query_engine is not supported for tables with row_filter=<mask>` (code `AccessDenied`) | A row filter applies to you on this table. The Query Engine doesn't run on a table with a row filter for that user, even if the filter is scoped to Trino. | See [security](/develop/docs/dev-vector-search-operations-security#which-rules-work-with-vector-search). | A search that doesn't match the index's query shape usually doesn't fail: it runs as a full scan. See [troubleshooting](/develop/docs/dev-vector-search-troubleshooting-index#searching). ## See also - [Troubleshooting](/develop/docs/dev-vector-search-troubleshooting-index): symptoms that don't produce an error. - [VAST DataBase errors](/develop/docs/dev-database-troubleshooting-errors): SDK and cluster errors that aren't specific to vectors.