> ## Documentation Index
> Fetch the complete documentation index at: https://infino.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Troubleshooting common Infino errors and fixes

> Common Infino errors and their fixes, covering in-memory update limits, schema and vector dimension mismatches, SQL query syntax, and language-specific gotchas.

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://`:

```python theme={null}
db = infino.connect("./data")   # 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](/docs/cloud/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](/docs/cloud/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:

```toml theme={null}
infino = { version = "0.1", default-features = false }
```

## 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](/docs/guides/parquet-interop).

## See also

* [FAQ](/docs/faq)
* [Tables](/docs/guides/tables)
* [Storage](/docs/guides/storage)
