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: "<id>" }
... description: [req=0x<id>]: 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).
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. |
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. |
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). |
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). |
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). |
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). |
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). |
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). |
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). |
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). 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). |
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). |
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). |
{"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). |
[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). 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). |
RequestDataTooLarge ... Content_length=<n> is larger than max available buffer cmd=START_QUERY |
The SQL statement is larger than the 5 MB cap (limits) | 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). |
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). |
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). |
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). |
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). 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). |
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. |
A search that doesn't match the index's query shape usually doesn't fail: it runs as a full scan. See troubleshooting.
See also
- Troubleshooting: symptoms that don't produce an error.
- VAST DataBase errors: SDK and cluster errors that aren't specific to vectors.