Skip to content

Migrate into QuestDB

Tested with: QuestDB 10.0 on Databasezy · zb CLI 0.1

Sources: Self-hosted QuestDB (REST or Postgres-wire URL), CSV files, another Databasezy instance.

Per table: recreate it from table_columns() and tables() (designated timestamp, partitioning, WAL, symbol options, dedup keys), stream /exp CSV from the source straight into /imp on the target, then wait until the target WAL has applied the import. A postgresql:// URL is accepted and mapped to the REST port 9000 (?http_port= overrides). Uploaded CSV files go through the same /imp.

shell
# --dry-run prints the preflight checklist and the exact plan without changing anything
zb migrate --from "http://admin:[email protected]:9000" --engine questdb --to inst_abc
zb migrate --from ./metrics.csv --engine questdb --include metrics --to inst_abc

Follow it with zb migrate status <mig_id>, or in the portal under the instance’s Migrate in tab.

count() per table and a hash of each table’s columns. Mismatches are listed in the result; nothing is switched for you.

  • Column types CSV cannot carry (BINARY, arrays) are not copied.
  • Materialized views are not copied; recreate them after the copy.
  • Parquet uploads are not accepted; upload CSV with a header row.

How migrations work covers preflight, verification and cutover; engine conversions covers moves between engines.