FAQ
Getting Started
What are the system requirements?
Requirements depend on your deployment method:
Docker deployment:
- Docker Engine 24.0 or newer
- Docker Compose v2.20 or newer
- 2 GB RAM minimum
- 2 GB free disk space
- 2 CPU cores minimum (3+ recommended)
Desktop application:
- Windows, macOS, or Linux
- 1 GB RAM minimum
- 1 GB free disk space
- 2 CPU cores minimum (3+ recommended)
See the OS Compatibility Guide for supported Linux distributions.
What deployment options are available?
- Docker deployment (recommended) — containerized solution with all infrastructure components included. Also available as a DigitalOcean 1-Click App.
- Desktop application — native app for Windows, macOS, and Linux that bundles all services into a single process.
See Deployment for setup instructions.
Can I transfer data between different operating systems?
Yes. DBConvert Streams connects to databases over the network, so the OS running the source or target database does not matter. You can transfer data between a Windows-hosted PostgreSQL and a Linux-hosted PostgreSQL in either direction.
Choosing DBConvert Streams
DBConvert Streams is a single tool for exploring, migrating, and replicating databases — sitting between database IDEs (DBeaver, DataGrip) and CDC pipelines (Debezium, AWS DMS). No Kafka, no Kubernetes, no cloud account. Runs as a Docker Compose stack on any Linux server, or as a desktop app on Windows, macOS, and Linux.
Which category does DBConvert Streams fit into?
Three at once:
| Category | Typical tools | What DBConvert Streams does |
|---|---|---|
| Database IDE | DBeaver, DataGrip, Navicat, TablePlus, DbForge | Data Explorer, SQL Console, ER diagrams, federated queries |
| Data migration / ETL | Airbyte, Fivetran, Stitch, Hevo, Apache Hop | Load mode for one-time bulk loads and schema conversion |
| CDC / streaming | Debezium, AWS DMS, Estuary, StreamSets, Striim | CDC mode for real-time replication from WAL / binlog |
See the full comparison hub for side-by-side pages.
How does DBConvert Streams compare on pricing and infrastructure?
| Tool | Hosting | Infrastructure | Pricing model |
|---|---|---|---|
| DBConvert Streams | Self-hosted | Docker Compose or desktop app | Per-seat license |
| Fivetran | Managed cloud (SaaS) | None (provider-managed) | Usage-based (per row / MAR) |
| Airbyte OSS | Self-hosted | Typically Kubernetes + workers | Free (infrastructure cost) |
| Debezium | Self-hosted | Kafka + Kafka Connect + sink | Free (infrastructure cost) |
| DBeaver / DataGrip | Desktop | None (client-only) | Per-seat license |
Do I need Kafka or Kubernetes to run CDC replication?
No. DBConvert Streams runs CDC without Kafka, Zookeeper, or Kubernetes.
- The only required message broker is NATS.
- NATS ships with the product — embedded into a single process in the desktop app, included as a container in the Docker Compose stack.
- No separate installation, configuration, or scaling.
Is there a self-hosted alternative to Fivetran or Airbyte?
Yes. DBConvert Streams is built for this.
- vs Fivetran — no cloud account, no usage-based fees.
- vs Airbyte — no Kubernetes, no separate worker pool, single-stack install.
- Runs on any Linux server, your own hardware, or a desktop machine with Docker.
How does DBConvert Streams compare to database IDEs like DBeaver or DataGrip?
Traditional IDEs are great for browsing and editing, but they don't move data between systems or support real-time replication. DBConvert Streams includes a full database IDE plus migration and CDC in the same workflow.
| Capability | DBeaver / DataGrip | DBConvert Streams |
|---|---|---|
| SQL editor, table browsing, ER diagrams | ✓ | ✓ |
| Query files and S3 with SQL (DuckDB) | ✗ | ✓ |
| Federated queries across connections | ✗ | ✓ |
| Bulk migration between heterogeneous databases | ✗ | ✓ |
| Real-time CDC replication | ✗ | ✓ |
See Data Explorer for the IDE workflow.
Can I run database replication without managed infrastructure?
Yes. DBConvert Streams deploys on a plain Linux VPS, your own hardware, or a desktop machine. It does not require cloud-managed services, external queues, or third-party connectors. If you can run Docker, you can run DBS.
What is the difference between DBConvert Streams and Debezium?
Debezium captures changes but, in typical deployments, only publishes them to Kafka — separate sink connectors or consumers are needed to land the data. DBConvert Streams handles the full pipeline.
| Debezium (typical setup) | DBConvert Streams | |
|---|---|---|
| Source capture | ✓ | ✓ |
| Message transport | Kafka required | NATS (bundled) |
| Target writer | Separate sink connector | Built-in |
| Pipeline scope | Capture only | End-to-end |
How much does it cost to replicate MySQL to PostgreSQL in real time?
DBConvert Streams is licensed per seat, not per row or per connector. There are no usage-based fees. See the Pricing page for current plans.
Streams and Data Transfer
How do I choose between Load and CDC mode?
- Load mode reads existing data in bulk. Use it for initial loads, one-time migrations, or when you do not need continuous replication.
- CDC mode captures ongoing changes from transaction logs (WAL / binlog). Use it for real-time replication after the initial load.
See CDC vs Load for a detailed comparison.
Can I do initial load and CDC in one stream?
Yes, when supported. Use a CDC stream with Initial Load + CDC enabled.
- The stream first copies existing rows (initial snapshot).
- After bootstrap completes, it continues with ongoing CDC changes in the same stream.
If Initial Load + CDC is not supported for your source-target shape, use the two-step pattern: run Load first, then start CDC.
See Initial Load + CDC and the Capability Matrix.
Does DBConvert Streams support resumable initial-load continuation?
Yes, for eligible flows. DBConvert Streams supports resumable chunked snapshot copy for large bootstrap/load paths where the route is eligible.
- On interruption, the stream can continue from saved chunk state instead of restarting the whole table copy.
- Eligibility depends on source/target path and execution mode.
See Resumable Load for exact routing and limits.
Why doesn't my load resume?
Resume only turns on when the whole target configuration is eligible. The most common reason a load restarts from scratch is a schema policy of Drop and recreate — it wipes the target on every run, so there is no saved progress to resume from, even when write mode is Upsert.
For resume, pair write mode upsert with schema policy create_missing_only or validate_existing, use a MySQL/PostgreSQL source and target, and tables with a single numeric primary key. See the quick reference table for the write-mode and schema-policy combinations.
How many rows are grouped per message?
As many as fit in 1 MB, and no more than the target's statement limits allow. There is nothing to set.
A batch has to respect two limits that a row count cannot express: NATS accepts at most 64 MB per message, and MySQL binds at most 65535 parameters per statement — that second one is rows multiplied by columns, so 1000 rows of a 150-column table is over it. Both are now computed per table as the batch fills.
1 MB is measured, not chosen: a million rows moved fastest at that size, with bigger batches no faster and small ones markedly slower.
Can I set limits on stream operations?
Yes. Two limit types are available:
| Parameter | Effect |
|---|---|
numberOfEvents | Stop after processing this many events |
elapsedTime | Stop after this many seconds |
{
"limits": {
"numberOfEvents": 1000000,
"elapsedTime": 3600
}
}
How does table structure creation work on the target?
DBConvert Streams can automatically create tables on the target using structureOptions:
- Automatically maps data types between different databases — see what every type becomes
- Creates corresponding indexes
To speed up initial loads, set structureOptions.indexes: "disabled" and create indexes after the data transfer completes.
Common Migrations
How do I migrate from MySQL to PostgreSQL?
Two steps:
- Initial load — use Load mode. Schema is mapped automatically from MySQL types to PostgreSQL equivalents (full table).
- Ongoing changes — switch to CDC mode to replicate with minimal lag.
See MySQL Load Configuration and MySQL CDC Configuration.
How do I replicate PostgreSQL changes to S3?
Set PostgreSQL as the CDC source and an S3-compatible bucket as the target. Change events are written as JSONL or Parquet files.
Supported providers:
- AWS S3
- MinIO
- Cloudflare R2
- Any S3-compatible API
See PostgreSQL CDC Configuration and S3-Compatible Storage.
Can I sync MySQL or PostgreSQL to Snowflake?
Snowflake target support is in active development. Subscribe to updates on the What's New page to be notified when it ships.
Can I migrate only specific tables or rows?
Yes. Two levels of filtering are available:
- Tables — schema selection settings include or exclude specific tables.
- Rows — Data Filters or Custom SQL Queries limit which rows get transferred.
Database Explorer
What can I do with Data Explorer?
Data Explorer lets you browse and work with connected databases directly within DBConvert Streams:
- Browse tables, views, and functions across connections
- Examine column definitions, keys, and indexes
- View and edit table data
- View DDL statements
- Visualize table relationships through ER diagrams
- Run SQL queries via the SQL Console
- Query local files and S3 objects using DuckDB
- Run federated queries across multiple sources
See Data Explorer documentation for full details.
How do I access Data Explorer?
Click the Data Explorer icon in the left sidebar. It opens a full workspace with a connection tree, tabs for tables and queries, and a bottom logs panel.
Can I query files and S3 storage with SQL?
Yes. Select a file or S3 connection in Data Explorer, and the SQL Console switches to DuckDB mode. Use read_parquet(), read_csv_auto(), and read_json_auto() to query files directly. See SQL Console — File and S3.
What are federated queries?
Federated queries let you JOIN data across multiple databases and file sources in a single SQL statement. Select two or more connections, assign aliases, and write alias-qualified queries — all powered by DuckDB. See Federated Queries.
Can I run one federated SQL query across MySQL, PostgreSQL, and S3?
Yes. In Data Explorer, federated queries can combine multiple database and file/object sources in one SQL statement.
- Typical pattern: JOIN MySQL and PostgreSQL tables with data from S3 in a single query.
- For file/object inputs, common formats include CSV, JSON, and Parquet.
See Federated Queries and SQL Console — File and S3.
Troubleshooting
"Slow consumer, messages dropped" error
This NATS error means the target writer cannot keep up with incoming messages. Batch size is no longer something to turn down — it is bounded at 1 MB per message — so the remedy is on the target: add a writer replica, or look for what is making writes slow (missing indexes on the target, an undersized instance, a saturated network link).
"Data size exceeds max payload" error
A batch is bounded at 1 MB, so this can only mean one row is larger than the transport carries. The run says which table and which column is responsible.
Either narrow the stream so that column is not copied, or raise the NATS
max_payload setting — 64 MB is its documented ceiling:
port: 4222
jetstream = {
store_dir: "/data/nats-server/"
}
max_payload: 8MB
PostgreSQL connection timeout after inactivity
The error SendStandbyStatusUpdate failed: write failed: closed appears when a connection times out after roughly 30 minutes of inactivity. Extend the idle timeout in your connection string:
postgres://postgres:[email protected]:5432/mydb?pool_max_conn_idle_time=10h
PostgreSQL checkpoint frequency warnings
If you see checkpoints are occurring too frequently, increase max_wal_size or checkpoint_timeout in postgresql.conf. This is common during large bulk transfers that generate heavy WAL activity.
Security
How are credentials managed?
DBConvert Streams encrypts all sensitive information (database passwords, SSL/TLS certificates, client certificates, API keys). The desktop app stores secrets in an encrypted file under its app data directory. Docker deployments can optionally use HashiCorp Vault. See Credential Management for details.
What SSL/TLS modes are supported?
| Mode | Description |
|---|---|
| Disable | No encryption (development only) |
| Require | Encrypted connection, no certificate verification |
| Verify-CA | Server certificate verified against CA |
| Verify-Full | Full verification including hostname validation |
See SSL Configuration for setup instructions.
Performance
How can I optimize large data transfers?
For initial bulk loads:
- Use Load mode
- Disable index creation (
structureOptions.indexes: "disabled") and create indexes after the transfer
For continuous replication:
- Use CDC mode for minimal source impact
- Monitor resource usage through the Observability dashboard