Cmd+Shift+E) re-reads every table you tick with SELECT * FROM, so what is on screen has no bearing on the file: filters, sort, hidden columns, and the page you are on are all ignored, and table size does not matter. Export Results… on the grid’s right-click menu writes what the tab has loaded instead. Import is Cmd+Shift+I.
Export data
1
Open the export dialog
Open a table or run a query, then click Export in the toolbar (
Cmd+Shift+E), or right-click the results grid and choose Export Results….2
Choose a format and scope
Pick a format, tick objects in the tree, and set the options for that format.
3
Export
Click Export. The destination file appears only on success: a failed or cancelled export removes its partial file.


Export dialog
What the tree lists
SQL exports more than tables. A database holding more than one kind of object groups them, in the order a restore needs them:
A database with only tables lists them flat, with no group to open first.
Arrow keys move through the tree, Left and Right close and open a group, and Space ticks every selected row. Ticking a group ticks everything under it.
Only SQL writes every group. CSV, JSON and XLSX take tables and views, and switching to one of them drops the rest from the tree. Per-object checkboxes follow the kind: Data is off the row for anything without rows, and a privilege row carries neither Drop nor Data.
Narrowing what a table exports
Click the filter icon on a table row to write aWHERE clause, cap the row count, or pick columns. The icon fills in once a table is narrowed, and its tooltip repeats what the narrowing is.
The clause is your engine’s own SQL, spliced into the SELECT the export runs. It has to be one expression: a semicolon anywhere but the end refuses the filter, and the export summary says the table went out whole.
Ticking no column exports every column, which is also what a table with a column added later gets.
What ends up in the file
A whole-table export streams from the database at constant memory, with no row-count limit, and can be cancelled from the progress dialog. Export Results… writes what the tab holds in memory, which is the output of the query that filled it. The filter bar and a sorted header are part of that query, and so is column visibility on a table tab: hiding a column re-queries without it, keeping only the primary key and anything being sorted on. Two things are not part of it. A column value filter narrows the loaded rows in the grid afterwards, so it never reaches the file. And a truncated result with more rows behind it is re-run and streamed in full rather than written as far as it got. As SQL, a results export writesINSERT statements only. A result set is the output of a query rather than a table, so there is no schema to recreate and nothing to drop: the Structure and Drop options belong to the toolbar export, which reads real tables. Identifiers are quoted and values escaped the way the source engine reads them, so the file imports back into it.
Formats
- CSV
- JSON
- SQL
- MQL
- XLSX
- Markdown
- HTML
- XML
- Parquet
Sanitizing prefixes a value starting with
=, +, -, or @ with a single quote, so a spreadsheet treats it as text.Excel on Windows needs the byte order mark to read a UTF-8 file. Readers that do not expect one read it as part of the first column name. Only UTF-8 carries a mark, so the checkbox dims for the other two encodings.ISO Latin 1 and Windows-1252 cover fewer characters than the data might hold. A character neither can represent is written as ?, and the export finishes with a warning listing the characters that were dropped.Transfer to another connection
Right-click tables in the sidebar and choose Transfer To… to copy their rows straight into another connection, with no file in between.1
Open both connections
The destination list holds the connections that are already open. A connection that is not open does not appear.
2
Pick the destination and its database
Then tick the tables to copy.
3
Transfer
Each table is wrapped in its own transaction by default, so a table that fails leaves its own rows untouched and the ones before it committed.
Clipboard paste (CSV/TSV)
Select a row in the data grid and pressCmd+V to paste tabular data straight in. Tabs parse as TSV, commas as CSV.
Import data
File > Import > Import Data… (Cmd+Shift+I) takes .sql and .sql.gz files, whose statements execute directly against the database, and .json, .jsonl, .ndjson, .csv, and .tsv files, which load into a table you pick or one TablePro creates.
1
Pick the file
Choose File > Import > Import Data… and select the file. The sheet that opens depends on what you picked.
2
Set the options
Encoding, transaction wrapping, and error handling for SQL; parsing and column mapping for CSV and JSON. TablePro remembers the options from your last successful import, and Reset to Defaults restores the stock ones.
3
Review and import
Check the preview, statement count, and file size, then click Import.


Import dialog with SQL file preview
Options
Skip and Continue collects up to 1,000 failures with their line numbers and messages, and the summary counts successes against failures behind a Copy Details button. Save Report… writes them all to a CSV with a line, a statement and the database’s own error per row, so a large import’s failures can be sorted and searched rather than scrolled. A stop shows the line, the database’s own message, and the failing statement, with the dialog still open behind it, ready for a changed setting and another run.
Disabling foreign key checks
The checkbox runs a different statement per engine, and one of them needs a privilege.
A server that rejects the statement stops the import with that error, so clear the checkbox and run it again. A dump TablePro exported usually needs no privilege, because its tables are already ordered parents first. On PostgreSQL and Oracle, whose
CREATE TABLE leaves foreign keys out, the dump adds them with ALTER TABLE … ADD CONSTRAINT after the data instead.
Import JSON
The sheet accepts an array of objects[{…}, {…}], newline-delimited JSON streamed a line at a time, and TablePro’s own export shape { "table": [ {…} ] }, so an export round-trips. Then choose a destination:
- Existing table: map each JSON field to a column. Fields auto-match by name; switch one off to skip it. A column with no matching field keeps its default or NULL.
- New table: the name field opens on a name derived from the file, already selected, so one keystroke replaces it. Review the inferred columns underneath. Name, type, primary key, nullable flag, and default are all editable before the table is created.
users.csv next to a users table proposes users_2. Whatever you type over it is held to the same rules: a name already taken, one longer than the engine allows, or one starting with a prefix the engine keeps for itself is reported in the sheet, with Import off until it changes.
Rows insert through parameterized statements, so a JSON value is never concatenated into SQL. Nested objects and arrays are stored as JSON text.
Import XLSX
Reads the first worksheet of an.xlsx workbook. The destinations and the proposed new-table name
behave as they do for JSON.
A row that omits its empty cells still lands in the right columns: each cell’s own reference decides where it goes, not its position among the cells that were written. Text stored in the workbook’s shared string table is resolved, including a value split across several formatting runs.
The workbook is read whole rather than streamed, because a sheet’s rows refer back to a string table that has to be held anyway.
Import CSV
CSV and TSV open the same sheet as JSON, with parsing options in front of the mapping. The delimiter and encoding are detected from the file; change any option and the mapping re-reads it.
Quoted fields keep embedded commas and newlines (RFC 4180), and a doubled quote (
"") decodes to one.

