Tools
The Tools menu (in the toolbar) gathers database-wide utilities.
Data Transfer
Requires Premium
Copy tables — schema and rows — from one database to another, even across connections and engines (ElyraSQL ↔ SQLite).
- Tools → Data transfer…
- Pick a Source (connection + database) and a Target (connection + database). The target connects automatically if needed.
- Choose All tables or Selected (tick the tables you want).
- Options:
- Create tables if missing — builds each target table from the source's columns and primary key.
- Empty target tables first — clears existing rows before copying.
- Transfer — a per-table report shows rows copied (and any errors).
Note
Secondary indexes and foreign keys are not reproduced (columns + primary key only). Rows are streamed in batches.
Structure Synchronization
Requires Premium
Compare two databases' schema and generate the statements that make the target match the source — new tables and missing/changed columns.
- Tools → Structure synchronization…
- Pick a Source and Target (connection + database).
- Compare — the generated script is shown (executable lines plus
--comments for anything that only differs in the target). - Apply to target runs the executable statements.
Non-destructive
Nothing is ever dropped — target-only tables/columns are reported as
comments. Added columns are nullable so applying to a populated table can't
fail. MODIFY COLUMN is emitted for ElyraSQL targets only (SQLite can't
alter column types).
Data Synchronization
Requires Premium
Make a target table's rows match a source table's, keyed by the primary key.
- Tools → Data synchronization…
- Pick a Source (connection + database + table) and a Target (connection + database).
- Optionally tick Delete target rows missing from source.
- Compare — see counts (inserts / updates / deletes) and the generated statements. Apply to target runs them in one transaction.
Note
Requires a single-column primary key. Both sides are diffed in memory, so very large tables (>100k rows) are declined.
Extract a slice
Requires Premium
Reproducing a problem usually needs the rows involved — one customer, their orders, the products on those orders — not the whole database. Copying them by hand breaks on the first foreign key. A slice follows the keys for you.
- Tools → Extract a slice…, or right-click a table → Extract a slice…
- Pick the table to start from, and a Where condition —
id = 4711,created_at >= '2024-01-01'. Empty takes the first rows. - Choose whether to include the rows that reference the starting rows.
- Choose the output and Extract.
What goes in. Every row that anything in the slice points at, always — and their parents in turn — so the slice loads without a broken key. With the option ticked, also the rows that point at the starting rows, and the rows that point at those: a customer's orders and the orders' lines. Children are followed only downwards from where you started, never back out through a shared parent — the products on Ada's orders come along, but not every other order line that mentions those products.
What comes out, in your Downloads folder:
- SQLite file — tables, primary keys, foreign keys and rows, ready to open. Open as connection… adds it to the sidebar.
- SQL INSERTs — parents before children, for loading into a database that already has the schema (a dev database with your migrations applied).
The source is only ever read. Nothing is written to any server.
Limits
- Only declared foreign keys are followed. The ER diagram's inferred relationships are guesses, and a slice built on a guess would present it as fact.
- A table with a binary column (
BLOB,BINARY, …) in the slice is refused by name rather than written as[N bytes]. - The slice stops at 100,000 rows and says so; narrow the condition, or leave out the referencing rows.
- Not available on ClickHouse, which has no foreign keys.
Data Generation
Requires Pro
Fill a table with plausible test data.
- Tools → Data generation…
- Pick the connection, database and table, and a row count.
- Generate.
A generator is inferred per column from its type and name — names, emails, country codes, dates, booleans, numbers — and a single integer primary key gets sequential values continuing after the current maximum. If you generate into the table you're browsing, the grid refreshes automatically.
Other tools
| Tool | What it does |
|---|---|
| Extract a slice… | Rows from one table plus everything their keys need, to a local file (Premium) |
| Data dictionary… | Dumps every object's CREATE statement into a new query tab (Pro) |
| Console | Opens a new query tab |
| Find in database… | Opens the command palette to jump to any table |
| Server monitor… | The live process list (Premium, ElyraSQL only) |
| History log | Your query history |