# Upload files

> Turn a CSV, TSV, Parquet or JSON file into a table in a few clicks: what each database accepts, the 200 MB limit, and updating uploads.

Source: https://tini.so/docs/data/upload-files

Got an export from your payment tool, your store or an ad platform? Upload it, and it becomes a table you can query, chart and ask the agent about, next to the rest of your data.

## What you can upload

| Into | File types | Column types |
| --- | --- | --- |
| A DuckDB warehouse (recommended) | CSV, TSV, Parquet, JSON (.json, .ndjson, .jsonl) | Detected from the data: numbers, dates, true/false and text |
| A Postgres data source | CSV and TSV | Every column comes in as text |

Files can be up to 200 MB. The first row of a CSV or TSV file is used as the column names.

## Upload a file

1. **Pick where it goes**

   Open **Explore** and select the data source to upload into: usually your DuckDB warehouse.

2. **Choose the file**

   Click **Load data** and choose the file. Orcabase suggests a table name from the file name: `Stripe-Payments.csv` becomes `stripe_payments`.

3. **Pick a schema and a table name**

   **Schema** is the folder the table goes in (`main` in DuckDB, `public` in Postgres, unless you pick another). **Table name** can use letters, numbers and underscores, and can’t start with a number. It has to be a new table: uploading onto an existing name fails.

4. **Load it**

   Click **Load data**. When it’s done, Explore opens the new table so you can check it in **Preview Data**.

> **Tip: Keep uploads tidy**
>
> In a DuckDB warehouse, click **New schema** first and make one for uploads, like `uploads`. Your own files stay apart from synced data.

## Uploading into Postgres

An upload into Postgres runs as the data source’s own login, and that login needs permission to create tables. A read-only user (the kind we recommend for day-to-day queries) can’t, so the upload fails with a permission error. Upload into your DuckDB warehouse instead, or add a second data source that logs in as a user that can create tables.

Postgres uploads load every column as text. To use a column as a number or a date, convert it in your query (for example `amount::numeric`), or in a [data model](https://tini.so/docs/data-models)’s expression.

## Updating an upload

An upload is a snapshot. To bring in a newer export, upload it under a new table name, or drop the old table with SQL and upload again. For data that changes often, a [sync](https://tini.so/docs/data/sync) keeps it fresh for you.

---

Previous: [Orcabase-hosted databases](https://tini.so/docs/data/hosted.md) · Next: [Sync data](https://tini.so/docs/data/sync.md)

All docs: https://tini.so/llms.txt
