Skip to content
Tinker
Download

Export, import and transfer

Rows are written as they arrive, so a large table never has to fit in memory.

⌘E on any grid. Format, scope and the options that format needs, and nothing else.

Export

FormatOptions
CSVDelimiter, quote, header row, NULL representation, UTF-8 or UTF-8 with BOM for Excel.
JSON / NDJSONAn array of objects, or one object per line.
SQL INSERTBatch size, optional CREATE TABLE, the source dialect.
ExcelA streamed .xlsx workbook.

Scope is the selection, the loaded rows, or the entire table or query. The last re-executes the statement and streams straight to disk with a progress sheet you can cancel. Export runs off the main thread and writes through a buffered file handle.

Note
Text exports guard against spreadsheet formula injection: a cell that begins with =, +, -, @, tab or carriage return is prefixed so a spreadsheet shows it as text. The switch is on by default (ADR-0032).

Dump and import

Dump writes a database, a schema or a set of tables as SQL, structure and data or either alone, in the engine’s dialect. Import runs a SQL script, statement by statement through the same splitter the editor uses, and reports progress and any failure with the statement that caused it. Import from CSV maps columns of a file onto a table with type coercion and shows the rows it could not coerce rather than dropping them.

Transfer between databases

Transfer copies tables from one connection to another, including across engines, streaming rows through in batches. Across engines the table is rebuilt in the target’s own terms — its spelling of the types, defaults it can read, the primary key, the indexes and the foreign keys — and the rows travel as the target’s literals: a PostgreSQL array arrives as JSON, a zone offset as ±HH:MM. Data sync compares rows by primary key and generates the INSERT, UPDATE and DELETE statements that would make the target match; like structure sync it shows destructive statements separately. Neither ever holds a table in memory.

Careful
What is written in the source’s own SQL cannot cross: views, routines, triggers, check constraints, generated columns, partitioning and full-text indexes stay behind. The transfer names every one of them when it finishes, under “Left behind on the way across engines”, so nothing is assumed to have arrived.