Migrate data between databases with Pipelines
CanvaDB Pipelines move data from one database to another using a batch ETL engine — no scripts, no staging servers, no manual exports. Follow the steps below to run your first migration.
Understand the pipeline architecture
CanvaDB pipelines use a standard ETL (Extract → Transform → Load) pattern. Data is pulled from the source in batches of 500 rows, type-coerced into a consistent format, then written to the target in groups of 100 rows. Each table is dropped and recreated before the first batch, so every run starts clean. Progress is tracked in real time — bytes are counted at extraction, not load, so the counter always advances.
FREE plan pipelines are capped at 1 GB per run. PRO and Enterprise plans have no transfer limit.
Open the Pipelines page
Pipelines are available on PRO and Enterprise plans. From the left sidebar, click Pipelines to view all your migration runs. Each row shows the source → target types, unique pipeline ID (PLN-XXXXXX), row count, bytes transferred, and current status.
| Source ↓ / Target → | MG MongoDB | PG PostgreSQL | MY MySQL |
|---|---|---|---|
MG MongoDB | |||
PG PostgreSQL | |||
MY MySQL |
Create a new pipeline
Click "+ New Pipeline" and fill in a name, then choose the source database type (MongoDB, PostgreSQL, or MySQL) and the target database type. This just defines the configuration — no credentials are stored at this stage.
Enter connection strings and start
Open the pipeline you just created. Paste the source and target connection strings — CanvaDB encrypts them with AES-256-GCM before using them. When ready, click "Start Pipeline". The run is asynchronous — the page polls every 3 seconds so you see live updates without refreshing.
Connection strings are used only for the active run and never stored in plain text. Use a read-only replica for the source where possible.
Credentials are encrypted with AES-256-GCM and never stored in plain text. Each run clears and recreates the target tables — previous data is replaced.
Watch the live log stream
The terminal-style log viewer shows every stage as it happens: connection success, schema mapping, per-table extraction, target table preparation, batch loads, and row counts. Each log entry has a timestamp, level badge (INFO / SUCCESS / WARNING / ERROR), and message. Toggle Auto-scroll to keep the latest log in view.
Migration complete — share or re-run
When all tables finish, the status flips to COMPLETED and the final summary log shows total rows, total megabytes, and table count. A progress bar fills to 100%. From here you can share a read-only link to this pipeline run — useful for handing off to stakeholders or keeping an audit trail. Click "Start Pipeline" again at any time to re-run; the target tables are wiped clean so there's no risk of duplicate rows.
Common questions
Each table is dropped and recreated before the first batch. This means every run starts from a clean state — no duplicates, no stale rows. If a table already existed in the target it will be replaced entirely.
Currently all columns are created as TEXT in the target. Dates, numbers, and booleans are serialized to their string equivalents. Native type mapping (INT, TIMESTAMP, etc.) is on the roadmap.
Bytes are counted after extraction (before load). When the running total crosses 1 GB, the migration stops and marks itself COMPLETED — partial data is preserved in the target. Upgrade to PRO for unlimited transfers.
Yes. Each run drops and recreates target tables so re-runs are fully idempotent. For MongoDB targets, documents are upserted by _id — no duplicates are created.
Yes — from the pipeline detail page click Share, toggle the link on, and copy the URL. The recipient sees the log stream, status, and progress in read-only mode. No login required. Credentials are never exposed on the public page.
Ready to run your first migration?
Start on the free plan — pipelines up to 1 GB are included. Upgrade to PRO for unlimited transfers, live collaboration, and audit logs.