Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/blog/generate-rows-sheet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/blog/search-database-results.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/og/blog/tablepro-0-83-beta.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
69 changes: 69 additions & 0 deletions resources/blog/tablepro-0-83-beta.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
---
slug: tablepro-0-83-beta
title: "TablePro 0.83 Beta: Search Database and Generate Rows"
description: The 0.83 beta adds Search Database, Generate Rows and a tablepro query command for Terminal. Turn on Get beta updates to try it before 0.83.0.
date: 2026-10-23
release: "TablePro 0.83 beta"
author: TablePro Team
tags: [release, mcp, ssh, import]
ogPunchline: Find a value in every table, fill one with test rows, and run SQL from Terminal.
---

TablePro 0.83.0-beta.2 is out for testing. Only Macs with **Get beta updates** on are offered it, and the stable 0.83.0 comes after the betas.

Search Database finds a value in every table, Generate Rows fills a table with test data, and `tablepro query` runs SQL from Terminal. Grid saves refuse an `UPDATE` or `DELETE` without a `WHERE`, and SSH tunnels drop SHA-1 and other old algorithms.

<asset-slot id="blog-tablepro-0-83-beta-1"></asset-slot>

## Search Database

Choose **Database > Search Database…**, or right-click a database or schema in the sidebar, and type a value: an email address, an order number, a UUID. TablePro runs one `SELECT` per table and lists the tables that hold it, with the matching columns and a row count. Open one and it comes up in a new tab, filtered to those rows.

Text columns are always searched, and number, date and UUID columns when the value reads as one. Counting stops at 1,000 rows per table, and **Stop** keeps what was found so far.

## Generate Rows

Right-click a table and choose **Generate Rows…** to fill it with 1 to 1,000,000 made-up rows. Each column gets a generator from its type and name: example-domain addresses for an `email` column, an enum's own labels, an existing key for a foreign key. The preview shows the first 10 rows before anything runs.

<asset-slot id="blog-tablepro-0-83-beta-2"></asset-slot>

Keys and unique columns never repeat, and the same seed and settings give the same rows. **Generate** inserts in one transaction, so **Cancel** rolls the run back on any engine with transactions. Safe Mode treats it like any other write.

## Queries from Terminal

`tablepro query` runs one statement through the app and prints the rows as CSV, TSV, JSON, JSON Lines or a table:

```bash
tablepro query -c Staging --format csv "SELECT id, email FROM users LIMIT 5" > users.csv
```

It talks to the app's MCP server, so turn on **Enable MCP Server** in **Settings > MCP** first. The first run asks you to pair it, starting at **Read Only**. **Settings > General > Command Line** shows how to link `tablepro` into your `PATH`, and [the docs](https://docs.tablepro.app/integrations/terminal) cover the options and exit codes.

## Also in the beta

- **View > Compare Result With…** matches two query results row by row, on key columns or whole rows
- Import a CSV, JSON or XLSX file into an existing table as **Update**, **Insert or Update** or **Insert, Skip Existing**, or import a folder of files in one run
- **Pin Tab** keeps a tab open through **Close Other Tabs**, **Close All Tabs** and a relaunch
- **Freeze Up to This Column** in the grid's header menu keeps leading columns in view
- Edit the schema from the ER diagram, and export the diagram as SVG, PDF, Mermaid or Graphviz DOT
- Inline suggestions and Review, Explain, Optimize and Fix can run on Apple Intelligence, on macOS 26 and later
- Emacs key bindings, under **Settings > Editor > Key bindings**, which replaces the Vim mode switch
- Kerberos sign-in for PostgreSQL and MariaDB, and Presto connections through the Trino plugin

## Changes to check

**SSH tunnels no longer offer SHA-1 key exchange, `ssh-rsa` signatures, SHA-1 and MD5 MACs, or 3DES, Blowfish and RC4 ciphers.** A server that offers only those fails with an error naming them.

A grid save stops before it sends an `UPDATE` or `DELETE` with no `WHERE` clause. A delete's confirmation lists the rows that foreign keys delete, rewrite or protect in other tables.

## What it will not do

- `tablepro query` returns the whole result at once, up to the MCP row limit, and refuses `DROP` and `TRUNCATE`
- Search Database needs SQL, and skips Cassandra, ScyllaDB and DynamoDB
- The iOS app isn't in this beta, though the release notes list its changes

## Getting the beta

Select **Get beta updates** in **Settings > General**, then choose **TablePro > Check for Updates…**. The DMG and the full notes are on the [GitHub release](https://github.com/TableProApp/TablePro/releases/tag/v0.83.0-beta.2).

To go back, deselect **Get beta updates**. The beta stays until 0.83.0 replaces it, and [Beta updates](https://docs.tablepro.app/beta-updates) covers installing the stable release over it sooner. Report a problem in a [GitHub issue](https://github.com/TableProApp/TablePro/issues), with the version from **TablePro > About TablePro**.
106 changes: 106 additions & 0 deletions resources/data/assets.json
Original file line number Diff line number Diff line change
Expand Up @@ -11227,6 +11227,112 @@
"/images/blog/set-value-generate-uuid.png"
]
},
"blog-tablepro-0-83-beta-1": {
"kind": "figure",
"type": "screenshot",
"family": "blog",
"ownerRepo": "web",
"slot": true,
"handoffPriority": "P3",
"usedOn": [
{
"path": "/blog/tablepro-0-83-beta",
"section": "figure-1"
}
],
"aspect": "722:521",
"priority": false,
"theme": "single",
"locale": "shared",
"mobile": null,
"description": {
"en": "The Search Database sheet after a search for the letter e in a sample SQLite database, listing six tables with their matching columns and row counts.",
"vi": null
},
"alt": {
"en": "Search Database sheet for the Fixture connection’s seeded-0.sqlite, reading Searched 6 tables. 6 tables hold “e” above six results with their matching columns and row counts: album by title with 2 rows, artist by name with 2 rows, document by label and payload with 2 rows, genre by name with 1 row, note by tag with 1 row and track by name with 9 rows, and Edit Search, Done and Open buttons at the bottom",
"vi": null
},
"caption": {
"en": "Each table that holds the value names the columns that matched and how many rows match.",
"vi": null
},
"replacement": {
"dir": "public/images/blog",
"base": "blog-tablepro-0-83-beta-1"
},
"status": "supplied",
"src": {
"light": {
"widths": [
704,
722
],
"formats": [
"avif",
"webp"
],
"width": 722,
"height": 521
}
},
"legacySource": [
"/images/blog/search-database-results.png"
]
},
"blog-tablepro-0-83-beta-2": {
"kind": "figure",
"type": "screenshot",
"family": "blog",
"ownerRepo": "web",
"slot": true,
"handoffPriority": "P3",
"usedOn": [
{
"path": "/blog/tablepro-0-83-beta",
"section": "figure-2"
}
],
"aspect": "1640:1122",
"priority": false,
"theme": "single",
"locale": "shared",
"mobile": null,
"description": {
"en": "The Generate Rows sheet set to 100,000 rows with seed 4271, the total column’s Decimal Range generator selected, and a preview of six generated rows.",
"vi": null
},
"alt": {
"en": "Generate Rows sheet with Rows set to 100,000 and Seed 4271, a column list of id as Server Default, customer_id as Referenced Value, customer_email as Email, status as List of Values, total as Decimal Range, note as Text and created_at as Date and Time, the selected total column of type numeric(10,2) with a Decimal Range from 1 to 1000 at 2 decimal places, and a preview of six rows with example.com, example.net and example.org addresses, statuses such as paid, cancelled and shipped, totals, lorem ipsum notes and timestamps",
"vi": null
},
"caption": {
"en": "Each column starts from a generator picked by its type and name, and the preview shows the rows before anything is written.",
"vi": null
},
"replacement": {
"dir": "public/images/blog",
"base": "blog-tablepro-0-83-beta-2"
},
"status": "supplied",
"src": {
"light": {
"widths": [
704,
1408
],
"formats": [
"avif",
"webp"
],
"width": 1408,
"height": 963
}
},
"legacySource": [
"/images/blog/generate-rows-sheet.png"
]
},
"blog-tablepro-for-iphone-1": {
"kind": "phone",
"type": "screenshot-phone",
Expand Down
16 changes: 16 additions & 0 deletions resources/js/lib/data/asset-locales/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -1000,6 +1000,22 @@
"en": "On a uuid key with no default, Set Value offers Generate UUID and Generate UUIDv7."
}
},
"blog-tablepro-0-83-beta-1": {
"alt": {
"en": "Search Database sheet for the Fixture connection’s seeded-0.sqlite, reading Searched 6 tables. 6 tables hold “e” above six results with their matching columns and row counts: album by title with 2 rows, artist by name with 2 rows, document by label and payload with 2 rows, genre by name with 1 row, note by tag with 1 row and track by name with 9 rows, and Edit Search, Done and Open buttons at the bottom"
},
"caption": {
"en": "Each table that holds the value names the columns that matched and how many rows match."
}
},
"blog-tablepro-0-83-beta-2": {
"alt": {
"en": "Generate Rows sheet with Rows set to 100,000 and Seed 4271, a column list of id as Server Default, customer_id as Referenced Value, customer_email as Email, status as List of Values, total as Decimal Range, note as Text and created_at as Date and Time, the selected total column of type numeric(10,2) with a Decimal Range from 1 to 1000 at 2 decimal places, and a preview of six rows with example.com, example.net and example.org addresses, statuses such as paid, cancelled and shipped, totals, lorem ipsum notes and timestamps"
},
"caption": {
"en": "Each column starts from a generator picked by its type and name, and the preview shows the rows before anything is written."
}
},
"blog-tablepro-for-iphone-1": {
"alt": {
"en": "The Chinook Track table open in TablePro on iPhone, listing TrackId, Name, AlbumId and MediaTypeId for the first rows, with a pager reading 1-100 of 3503 and Tables, Query, History and Info along the bottom"
Expand Down
16 changes: 16 additions & 0 deletions resources/js/lib/data/asset-locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -1000,6 +1000,22 @@
"en": "On a uuid key with no default, Set Value offers Generate UUID and Generate UUIDv7."
}
},
"blog-tablepro-0-83-beta-1": {
"alt": {
"en": "Search Database sheet for the Fixture connection’s seeded-0.sqlite, reading Searched 6 tables. 6 tables hold “e” above six results with their matching columns and row counts: album by title with 2 rows, artist by name with 2 rows, document by label and payload with 2 rows, genre by name with 1 row, note by tag with 1 row and track by name with 9 rows, and Edit Search, Done and Open buttons at the bottom"
},
"caption": {
"en": "Each table that holds the value names the columns that matched and how many rows match."
}
},
"blog-tablepro-0-83-beta-2": {
"alt": {
"en": "Generate Rows sheet with Rows set to 100,000 and Seed 4271, a column list of id as Server Default, customer_id as Referenced Value, customer_email as Email, status as List of Values, total as Decimal Range, note as Text and created_at as Date and Time, the selected total column of type numeric(10,2) with a Decimal Range from 1 to 1000 at 2 decimal places, and a preview of six rows with example.com, example.net and example.org addresses, statuses such as paid, cancelled and shipped, totals, lorem ipsum notes and timestamps"
},
"caption": {
"en": "Each column starts from a generator picked by its type and name, and the preview shows the rows before anything is written."
}
},
"blog-tablepro-for-iphone-1": {
"alt": {
"en": "The Chinook Track table open in TablePro on iPhone, listing TrackId, Name, AlbumId and MediaTypeId for the first rows, with a pager reading 1-100 of 3503 and Tables, Query, History and Info along the bottom"
Expand Down
16 changes: 16 additions & 0 deletions resources/js/lib/data/asset-locales/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -1000,6 +1000,22 @@
"en": "On a uuid key with no default, Set Value offers Generate UUID and Generate UUIDv7."
}
},
"blog-tablepro-0-83-beta-1": {
"alt": {
"en": "Search Database sheet for the Fixture connection’s seeded-0.sqlite, reading Searched 6 tables. 6 tables hold “e” above six results with their matching columns and row counts: album by title with 2 rows, artist by name with 2 rows, document by label and payload with 2 rows, genre by name with 1 row, note by tag with 1 row and track by name with 9 rows, and Edit Search, Done and Open buttons at the bottom"
},
"caption": {
"en": "Each table that holds the value names the columns that matched and how many rows match."
}
},
"blog-tablepro-0-83-beta-2": {
"alt": {
"en": "Generate Rows sheet with Rows set to 100,000 and Seed 4271, a column list of id as Server Default, customer_id as Referenced Value, customer_email as Email, status as List of Values, total as Decimal Range, note as Text and created_at as Date and Time, the selected total column of type numeric(10,2) with a Decimal Range from 1 to 1000 at 2 decimal places, and a preview of six rows with example.com, example.net and example.org addresses, statuses such as paid, cancelled and shipped, totals, lorem ipsum notes and timestamps"
},
"caption": {
"en": "Each column starts from a generator picked by its type and name, and the preview shows the rows before anything is written."
}
},
"blog-tablepro-for-iphone-1": {
"alt": {
"en": "The Chinook Track table open in TablePro on iPhone, listing TrackId, Name, AlbumId and MediaTypeId for the first rows, with a pager reading 1-100 of 3503 and Tables, Query, History and Info along the bottom"
Expand Down
16 changes: 16 additions & 0 deletions resources/js/lib/data/asset-locales/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -1000,6 +1000,22 @@
"en": "On a uuid key with no default, Set Value offers Generate UUID and Generate UUIDv7."
}
},
"blog-tablepro-0-83-beta-1": {
"alt": {
"en": "Search Database sheet for the Fixture connection’s seeded-0.sqlite, reading Searched 6 tables. 6 tables hold “e” above six results with their matching columns and row counts: album by title with 2 rows, artist by name with 2 rows, document by label and payload with 2 rows, genre by name with 1 row, note by tag with 1 row and track by name with 9 rows, and Edit Search, Done and Open buttons at the bottom"
},
"caption": {
"en": "Each table that holds the value names the columns that matched and how many rows match."
}
},
"blog-tablepro-0-83-beta-2": {
"alt": {
"en": "Generate Rows sheet with Rows set to 100,000 and Seed 4271, a column list of id as Server Default, customer_id as Referenced Value, customer_email as Email, status as List of Values, total as Decimal Range, note as Text and created_at as Date and Time, the selected total column of type numeric(10,2) with a Decimal Range from 1 to 1000 at 2 decimal places, and a preview of six rows with example.com, example.net and example.org addresses, statuses such as paid, cancelled and shipped, totals, lorem ipsum notes and timestamps"
},
"caption": {
"en": "Each column starts from a generator picked by its type and name, and the preview shows the rows before anything is written."
}
},
"blog-tablepro-for-iphone-1": {
"alt": {
"en": "The Chinook Track table open in TablePro on iPhone, listing TrackId, Name, AlbumId and MediaTypeId for the first rows, with a pager reading 1-100 of 3503 and Tables, Query, History and Info along the bottom"
Expand Down
16 changes: 16 additions & 0 deletions resources/js/lib/data/asset-locales/id.json
Original file line number Diff line number Diff line change
Expand Up @@ -1000,6 +1000,22 @@
"en": "On a uuid key with no default, Set Value offers Generate UUID and Generate UUIDv7."
}
},
"blog-tablepro-0-83-beta-1": {
"alt": {
"en": "Search Database sheet for the Fixture connection’s seeded-0.sqlite, reading Searched 6 tables. 6 tables hold “e” above six results with their matching columns and row counts: album by title with 2 rows, artist by name with 2 rows, document by label and payload with 2 rows, genre by name with 1 row, note by tag with 1 row and track by name with 9 rows, and Edit Search, Done and Open buttons at the bottom"
},
"caption": {
"en": "Each table that holds the value names the columns that matched and how many rows match."
}
},
"blog-tablepro-0-83-beta-2": {
"alt": {
"en": "Generate Rows sheet with Rows set to 100,000 and Seed 4271, a column list of id as Server Default, customer_id as Referenced Value, customer_email as Email, status as List of Values, total as Decimal Range, note as Text and created_at as Date and Time, the selected total column of type numeric(10,2) with a Decimal Range from 1 to 1000 at 2 decimal places, and a preview of six rows with example.com, example.net and example.org addresses, statuses such as paid, cancelled and shipped, totals, lorem ipsum notes and timestamps"
},
"caption": {
"en": "Each column starts from a generator picked by its type and name, and the preview shows the rows before anything is written."
}
},
"blog-tablepro-for-iphone-1": {
"alt": {
"en": "The Chinook Track table open in TablePro on iPhone, listing TrackId, Name, AlbumId and MediaTypeId for the first rows, with a pager reading 1-100 of 3503 and Tables, Query, History and Info along the bottom"
Expand Down
16 changes: 16 additions & 0 deletions resources/js/lib/data/asset-locales/it.json
Original file line number Diff line number Diff line change
Expand Up @@ -1000,6 +1000,22 @@
"en": "On a uuid key with no default, Set Value offers Generate UUID and Generate UUIDv7."
}
},
"blog-tablepro-0-83-beta-1": {
"alt": {
"en": "Search Database sheet for the Fixture connection’s seeded-0.sqlite, reading Searched 6 tables. 6 tables hold “e” above six results with their matching columns and row counts: album by title with 2 rows, artist by name with 2 rows, document by label and payload with 2 rows, genre by name with 1 row, note by tag with 1 row and track by name with 9 rows, and Edit Search, Done and Open buttons at the bottom"
},
"caption": {
"en": "Each table that holds the value names the columns that matched and how many rows match."
}
},
"blog-tablepro-0-83-beta-2": {
"alt": {
"en": "Generate Rows sheet with Rows set to 100,000 and Seed 4271, a column list of id as Server Default, customer_id as Referenced Value, customer_email as Email, status as List of Values, total as Decimal Range, note as Text and created_at as Date and Time, the selected total column of type numeric(10,2) with a Decimal Range from 1 to 1000 at 2 decimal places, and a preview of six rows with example.com, example.net and example.org addresses, statuses such as paid, cancelled and shipped, totals, lorem ipsum notes and timestamps"
},
"caption": {
"en": "Each column starts from a generator picked by its type and name, and the preview shows the rows before anything is written."
}
},
"blog-tablepro-for-iphone-1": {
"alt": {
"en": "The Chinook Track table open in TablePro on iPhone, listing TrackId, Name, AlbumId and MediaTypeId for the first rows, with a pager reading 1-100 of 3503 and Tables, Query, History and Info along the bottom"
Expand Down
Loading