Skip to main content

Data Grid

Query results and table data open in a spreadsheet-style grid. Sort and filter columns, edit cells inline, and copy in several formats.
Data grid

Data grid with query results

View Modes

Switch between Data, Structure, and JSON in the status bar. Query tabs show Data and JSON only. The mode is remembered per tab. JSON mode shows the rows as a JSON array, with Text and Tree views. Select rows in Data mode first to limit what JSON shows, then use Copy JSON.

Columns

Sort

Click a header to cycle through ascending, descending, and off. Shift-click another header to add it to the sort, so you can order by several columns at once. Sort re-runs the query with ORDER BY appended, replacing any existing one. To sort on open, set Settings > Data > Default row sort to Primary key or First column (default is No sorting). A click on any header still overrides it.
If the sort column can’t be ordered on the server (a BLOB, JSON, or spatial column), the query fails. Pick another column or set the default back to No sorting.

Filter

The header gives you two filters:
  • Filter Values… (or the funnel icon on hover) filters the loaded rows by picking values, without re-querying. The popover lists each value with its count; search to narrow, check the values to keep, and click Apply. NULL and empty values appear as their own entries. Return applies, Escape cancels. Filter several columns at once and rows must match every filter. Clear from the header menu (Clear Value Filter, Clear All Value Filters).
  • Filter with column adds a filter row for that column to the Filter Panel and opens it. Use this to filter the whole table on the server.
Value filter popover

Filter a column by its values

Value filters run on the rows already loaded, so they cover the current page only.

Resize and Hide

Drag a column border to resize, or double-click it to fit the content. The header menu has Size to Fit for one column and Size All Columns to Fit for all of them. Fitted columns stop at half the visible grid width, so one long-text column can’t push the rest off screen. Hide columns from the columns button in the status bar or the header menu. A hidden column isn’t fetched, so hiding a large column makes the table load faster. The primary key is always fetched, so editing still works. Column widths, order, and which columns are hidden are remembered per table, scoped to the connection, database, and schema. Click Reset Columns in the columns popover to put everything back to defaults.

Display Format

UUIDs and Unix timestamps render in a readable form when the column type and name match (for example a BINARY(16) column named uuid). Right-click a header and choose Display As to set the format per column: Raw Value, UUID, Unix Timestamp (seconds or milliseconds), JSON, or PHP Serialized. See Cell and Row Viewers for what each format does. Toggle the automatic detection in Settings > Data > Smart value detection.

Editing

Editing works on simple SELECT * FROM table queries. Joins, aggregations, and Safe Mode connections are read-only.
Double-click a cell to edit it. Press Enter to confirm or Escape to cancel. Some types open a dedicated editor:
Cell editor

Type-specific cell editor

Right-click an editable cell and open Set Value for common values without typing: Empty, NULL (nullable columns), Default (columns with a default), and date functions like NOW() or CURRENT_DATE on date columns.

Foreign Keys

Foreign key cells show an arrow on the right edge. Click it to open the referenced table filtered to the matching row; Cmd-click opens a new tab. Right-click for Preview Referenced Row, which shows the row in a popover.
Foreign key lookup

Foreign key lookup

Row Operations

  • Add (Cmd+Shift+N): click + in the status bar or use the shortcut.
  • Duplicate (Cmd+Shift+D): right-click a row and choose Duplicate. The primary key resets to DEFAULT so the database assigns a new one.
  • Delete: select rows by their row number (Shift-click for a range, Cmd-click for separate rows) and press Delete.
  • Paste: copy rows, then right-click and choose Paste to insert them as new rows.
  • Fill Column: right-click a header to set one value across all loaded rows. It skips primary key columns.

Saving Changes

Edits are queued, not applied right away. The toolbar shows the pending count, modified cells are highlighted, and new and deleted rows are marked.
  • Preview SQL (Cmd+Shift+P): review the statements before applying.
  • Save Changes (Cmd+S): apply all pending changes.
  • Undo / Redo (Cmd+Z / Cmd+Shift+Z): step through edits before saving.
There is no discard button. Undo your edits, or let the confirmation prompt drop them when you refresh, re-sort, change filters, or close the tab. See Change Tracking for how the queue works.

Inspector

Toggle the inspector with Cmd+Option+I. With a row selected, it lists every column value with full editors for long text and JSON; see Cell and Row Viewers for details. Turn on Settings > Data > Auto-show inspector on row select to open it automatically. With no row selected, it shows table statistics: data, index, and total size, row count, average row size, engine, collation, and created and updated dates (fields vary by database).
Row inspector

Row inspector

Select and Copy

Click a cell to select it, drag or Shift-click for a range, and click row numbers for whole rows. Copy, Copy as, and Delete act on the whole current selection, whether that is a cell range, a column (Cmd-click its header), or rows picked by their row numbers.
  • Cmd+C: the focused cell, or the selected rows as TSV.
  • Cmd+Shift+C: the selected rows as TSV.
  • Cmd+Option+J: the selected rows as JSON.
Right-click a row and choose Copy as for more formats: Copies follow the grid as shown: hidden columns are left out and columns keep their current order. When you select specific cells, Copy as (JSON, CSV, Markdown, INSERT, and UPDATE) includes only the columns you selected; select whole rows to include every column. Copy as UPDATE still keys its WHERE clause on the primary key, even when the primary key cell is not part of the selection. Right-click a header and choose Copy Column Values to copy a whole column, one value per line.

Pagination and Limits

Table tabs page through data. The status bar has a rows-per-page menu (5 to 1,000, a custom size, or All rows) and First / Previous / Next / Last controls. Click the page indicator (for example 3 / 12) to type a page number and jump to it. Set the default page size in Settings > Data. Large tables show an estimated total instead of running a slow COUNT(*). Settings > Data > Count rows if estimate less than sets the threshold below which TablePro counts exactly. Query tabs cap results at 10,000 rows by default. Your query is sent exactly as you wrote it; TablePro stops reading once it reaches the cap. A query with its own LIMIT, FETCH FIRST, or TOP is not capped. When the cap trims a result, the status bar shows Fetch All to load the rest (with a confirmation, since large results use a lot of memory). Run one query without the cap via Execute Without Limit (Option+Cmd+Enter). Adjust the cap in Settings > Data (Truncate query results, Row cap). Press Cmd+. to cancel a running query or a Fetch All.

Display Settings

NULL shows as styled NULL text. Set the NULL display, date format, row height, row numbers, and alternate row backgrounds in Settings > Data.

MongoDB Collections

MongoDB has no fixed schema, so TablePro infers columns by sampling up to 50 documents. Missing fields show as NULL, and the _id column is read-only (delete and re-insert to change it). BSON values display as ObjectId("..."), ISO 8601 dates, BinData(...), decimal strings, and DBRef(...). Changes preview as shell commands: insertMany, updateOne with $set, and deleteMany.