Common errors you might hit, and how to fix them. Each entry states the cause and the fix.
update / delete fails on an in-memory connection
These require durable storage. Connect with a path or s3:// URI, not
memory://:
update reports a cardinality mismatch
update replaces matched rows 1:1, so the number of rows your predicate matches must
equal the number of replacement rows you pass. Match a specific set (e.g. by doc_id)
and supply exactly that many rows.
”Table already exists” on create_table
The table is already in the catalog. Use open_table to get a handle to the existing
table, or drop_table first if you mean to recreate it.
”Unknown table” / “not found”
The table name doesn’t exist in the catalog (a typo, or it was never created). Check
list_tables(). In SQL, the table name passed to a search function (bm25_search('docs', …))
must be an existing catalog table.
Schema or vector-dimension mismatch on append
Appended rows must match the table’s declared schema (column names and types). For the
vector column, each vector’s length must equal the index dimension you declared in
IndexSpec.vector(column, dim, …), and that must match your embedding model’s output.
append fails with HTTP 413 on Infino Cloud
The request body went over the hosted data-plane cap of 128 MiB per request. Split the
load into smaller appends; target 100 MiB or less of Arrow data per batch, sized down
if rows carry wide vectors. See Limits.
append fails with HTTP 503 on Infino Cloud
Not a size error and not an outage. The service bounds the total in-flight
request-body bytes across concurrent requests, and sheds rather than queues when
admitting one more would exceed that budget. Honour the Retry-After header (one
second) and retry the same batch unchanged; the pressure drains as other requests
complete. If it recurs, lower ingest concurrency rather than batch size, since parallel
large appends are what exhaust the budget. See Limits.
Node.js: an integer column rejects a number
Arrow int64 columns expect a JavaScript bigint, not a number. Pass 2021n,
not 2021 (or coerce with BigInt(x)).
Rust: “cannot have two global allocators”
Infino installs mimalloc by default. If your process already sets a global allocator,
turn Infino’s off:
A vector query in SQL is rejected
vector_search / hybrid_search expect the query vector as a comma-separated string
literal ('0.12,0.04,...') or a SQL array literal ([0.12, 0.04, ...]), not a
bare column or an unquoted list.
Deleted rows still show up when reading Parquet directly
A raw Parquet read returns the rows as stored in the superfiles and does not apply
tombstones. For the live view (with update / delete applied), query through Infino
rather than reading the files directly. See Open format.
See also
Last modified on August 25, 2026