github TableProApp/TablePro v0.74.0

Added

  • Strikethrough on a row queued for deletion, and an underline on a new row or an edited value.
  • Google Cloud Spanner as a registry plugin over the REST API. (#1226, #2480)
  • Weaviate as a registry REST plugin, collections as tables. (#1724)
  • TiDB and Databend connection types on the MySQL driver. (#1066, #2514)
  • Empty state in the inspector and the assistant for a connection that is not up.
  • Check connections in Settings > General, including Only when I use the connection. (#2700)
  • Cloudflare R2 SQL driver, read-only, for Iceberg tables in R2 Data Catalog. (#2030)
  • Tips for preview tabs, Open Quickly, and query history.
  • Full changelog from Help and Software Update settings.
  • Enable Plugin, Open Plugin Settings and Edit Connection… on a connection whose driver cannot load.
  • Invisible characters shown in the SQL editor: control characters, zero-width spaces, bidi controls and special spaces. (#2717)
  • Remove Invisible Characters in the Query menu. (#2717)
  • Show invisible characters in Settings > Editor. (#2717)
  • Warnings in the SQL editor for full-width punctuation, curly quotes and non-ASCII spaces. (#2717)
  • Highlight rules that color data grid rows or cells by value. (#2723)
  • Encoding option for MySQL and MariaDB, with UTF-8 via Latin 1 for Latin 1-written databases. (#2725)
  • Refresh Materialized View… on PostgreSQL, with a concurrent refresh where the view qualifies. (#2726)
  • Show DDL and Copy DDL for views and materialized views. (#2726)
  • Edit Comment… for PostgreSQL tables, views, materialized views and foreign tables. (#2726)
  • UTF-16 LE, UTF-16 BE and Windows-1252 in the SQL import encoding menu.
  • Map view for a result holding a geometry column, drawn with MapKit over Apple's own tiles. (#2532)
  • Max INSERT size for SQL export, 1 MB by default. (#2533)
  • Largest INSERT written, in the SQL export summary. (#2533)

Changed

  • Syntax-highlighted, scrollable statement in the query confirmation, with Copy All and the caller's name. (#2759)
  • 5 MB smaller app bundle.
  • 7 MB smaller DMG download.
  • Connect progress reads as a labelled bar, with a step named only where the app is waiting on something outside itself.
  • BigQuery Google sign-in runs from a Sign In prompt, and its refresh token is kept in the keychain.
  • First launch opening on the welcome window, whose empty list offers the sample database and import from another app.
  • New Connection… and Import on the welcome window, named as in the File menu.
  • Open Project Folder… in File > Import.
  • First-launch tour replaced by a one-page welcome sheet, shown again from Help > Getting Started.
  • Beancount connections held at Safe Mode Read-Only. (#2030)
  • MySQL sessions on the server's default utf8mb4 collation.
  • Structure editor options the connected server does not support left out, FULLTEXT and SPATIAL among them.
  • Structure tab read-only on a view, a materialized view, a foreign table or a system table outside PostgreSQL. (#2726)

Fixed

  • Editor and results divider of one query tab following whichever tab in the pane was opened first.
  • Divider position of every query tab ever opened kept in preferences forever, slowing every launch.
  • Data grid and bottom bar cut off at both edges in a narrow window, with rows and pagination buttons out of reach.
  • Filter panel wider than the pane when a table has a long column name.
  • bytea values written as a bit string in a PostgreSQL SQL export, which no restore accepts. (#2533)
  • A gzipped SQL export emptying the file it was overwriting before compressing, and deleting it on failure. (#2533)
  • Parts of a split SQL export left on disk unnamed when a later part could not be written. (#2533)
  • SET IDENTITY_INSERT missing from every part after the first of a split SQL Server dump. (#2533)
  • CREATE TYPE and CREATE SEQUENCE left out of a SQL export with no warning when the lookup failed. (#2533)
  • Stop doing nothing while a gzipped SQL export was compressing. (#2533)
  • Export status never reaching the progress sheet, and an import showing a row count in place of its own. (#2533)
  • Binary values unrestorable in an Oracle SQL export. (#2533)
  • Transfer or copy of a table of megabyte values rejected as one oversized INSERT. (#2533)
  • Multi-row INSERT statements Oracle cannot parse when importing a CSV, JSON or XLSX file. (#2533)
  • Multi-row INSERT statements Oracle cannot parse in a SQL export. (#2533)
  • Minutes spent rendering hex literals when a SQL export reached a binary column. (#2533)
  • ClickHouse Drop Partition and Detach Partition hitting the sidebar's database, unconfirmed.
  • Import listing one database's tables and mapping their columns while the rows went to another.
  • New Table created in the database the sidebar moved to rather than the one its own tab names.
  • Show All Tables listing whichever database a cross-database tab last left the connection on.
  • Sidebar Refresh reloading the object list from a container the user is not browsing.
  • Wrong export row total where the objects picked span more than one database.
  • Snowflake foreign keys into another database opening the current database's same-named table.
  • Wrong database read, and written, by a connection whose startup commands select one of their own.
  • None in the foreign key picker's Label menu forgotten on reopen.
  • Elasticsearch geo_point columns classified as integers.
  • MySQL and MariaDB geometry values losing their SRID.
  • MySQL GEOMETRYCOLLECTION columns classified as text.
  • Empty GEOMETRYCOLLECTION from MySQL rendered as invalid WKT.
  • MySQL geometry with a Z or M ordinate read from the wrong offset.
  • Elasticsearch geo_shape values cut off at 10,000 characters.
  • A tab stranded in JSON or Chart mode, with no way back to Data, after a statement that returns no columns.
  • Prompt for password lost when importing a TablePlus connection set to Ask everytime.
  • TablePlus import saving a password for a connection TablePlus was set never to store one for.
  • TablePlus import reading the CA certificate and client key paths the wrong way round.
  • MySQL and MariaDB reads of an object in another database answering about the current database's. (#2769)
  • Nested foreign key chevrons in the row inspector pointing into the database the sidebar is on rather than the referenced one.
  • Ref Columns in the structure editor stuck on Custom… after one failed read, with no error and no retry.
  • Ref Columns reading the sidebar's database instead of the tab's.
  • Empty Ref Table menu in the structure editor on MySQL, MariaDB, TiDB, PostgreSQL, CockroachDB, Redshift, SQL Server and DuckDB.
  • New Trigger and Drop Trigger naming the sidebar's database rather than the table's.
  • describe_table over MCP answering with one database's columns beside another's indexes, foreign keys, row count and DDL.
  • Foreign key arrow replacing the tab you were reading. (#1421)
  • Applied filter left in the panel after cancelling the unsaved-changes alert on a foreign key jump.
  • Select All painting the whole column header row as selected, and leaving a cell cursor on the first cell.
  • Column header shown as selected after a cell drag reached the first and last row of the page.
  • No outline around a swept cell block whose rows reached both ends of the page.
  • Cmd+clicking a selected column header never deselecting it.
  • Escape not clearing the selection after Select All.
  • Silently lost edit on a table with no primary key holding a FLOAT, DOUBLE or JSON column.
  • A save on a table with no primary key reporting success when it matched no row.
  • SQL Server and Oracle reporting zero rows affected for every INSERT, UPDATE and DELETE.
  • Query confirmation dialog cut to the first 200 characters of the statement. (#2759)
  • Statement folded onto one line and cut at 400 characters in an MCP client's approval prompt.
  • Blank line under "Are you sure you want to execute this query?" when confirming a rename.
  • Row numbers and their divider painted over the find bar, the filter panel and the result tab bar.
  • Empty Columns tab and no autocomplete for PostgreSQL materialized views. (#2726)
  • Discard restoring a different row than the one edited under a column value filter.
  • Add Row under a column value filter selecting and opening the wrong row for editing.
  • Data grid ignoring the theme's background, text, alternate row, NULL, boolean and row number colors.
  • Text past the first 64 KB of a UTF-16 SQL import arriving byte-swapped.
  • SQL import failing on a file whose encoding is not UTF-8 when a character lands on a 64 KB boundary.
  • Garbled non-Latin text saved from iPhone and iPad to MySQL servers that force a Latin 1 session. (#2725)
  • Encoding ignored on iPhone and iPad by a MySQL connection synced from the Mac. (#2725)
  • Binary MySQL columns shown as text on iPhone and iPad, and searched with LIKE.
  • Crash opening a MySQL result whose column has no name on iPhone and iPad.
  • Wrong SQLSTATE code in PostgreSQL, Redshift, CockroachDB and PGlite error messages.
  • Read-only write explanation never shown on PostgreSQL servers.
  • Trigger editing and the New Trigger template failing on PostgreSQL 13 and earlier.
  • Reindexing a whole PostgreSQL database failing before PostgreSQL 16.
  • Schema copy, check constraint rename, column reorder and role editing failing on older PostgreSQL servers.
  • FULLTEXT and SPATIAL index types creating a plain B-tree index on PostgreSQL.
  • Table list, foreign keys, triggers, check constraints, types and grants failing on PostgreSQL 9.1 to 9.5. (#2734)
  • Wrong index column order on PostgreSQL 9.4 and earlier.
  • Sequences missing from SQL dumps of PostgreSQL 9.6 and earlier.
  • Create Database failing on PostgreSQL 9.6 and earlier.
  • PostgreSQL unique and primary key indexes shown as plain indexes.
  • PostgreSQL triggers shown as disabled.
  • PostgreSQL NOT VALID check constraints shown as validated.
  • Redshift DISTKEY missing from a table's indexes.
  • CYCLE dropped from PostgreSQL sequences in SQL dumps.
  • PostgreSQL index columns and enum labels containing a comma or a space split apart.
  • Foreign keys to a partitioned table listed once per partition on PostgreSQL 12 and later.
  • PostGIS values left as hex after switching schema.
  • Open transaction aborted when a PostGIS value could not be converted.
  • PostgreSQL all-tables metadata failing for a mixed-case table name.
  • Default PostgreSQL schema taken from the schema list rather than the search path.
  • Safe Mode minimum from a configuration profile missing from the toolbar, the Database menu and the connection form. (#2030)
  • PostgreSQL connection hanging after running COPY FROM STDIN or COPY TO STDOUT in the query editor and on iOS.
  • Table, view and column comments missing from a PostgreSQL SQL export. (#2726)
  • Stop not ending queries on MySQL and MariaDB servers without TLS.
  • Wrong results after MySQL retakes a dropped connection, on a session that had set a variable, a session setting or a database.
  • Session state set by the /*! ... */ statements a MySQL dump writes counting as a comment.
  • Users & Roles failing, Stop not ending queries and sequences listed as tables on TiDB servers opened as MySQL.
  • Truncated, unformatted release notes in the update dialog, with fixes listed before new features.
  • Blank welcome window list when a search matched nothing and a favorite existed.
  • Welcome window reading No Connections while a tag filter hid every connection.
  • Favorited connection inside a group listed twice on the welcome window.
  • Missing red wash on a row deleted together with a new, unsaved row.
  • Welcome window tag filter stuck on a tag no connection carries any more, hiding every connection.
  • Collapsing every group on the welcome window undone at the next launch.
  • Linked Folders and Team Library connections ignoring the welcome window search, with no context menu.
  • Dragging a connection in filtered welcome window results snapping back without moving it.
  • Welcome window context menu leaving linked connections out of a mixed selection.
  • Idle metadata connections held open for the life of the app, up to six per connection. (#2700)
  • MongoDB connections reading as healthy after the server went away. (#2700)
  • Password prompt raised by a background reconnect, on whichever window was in front. (#2700)
  • Health check entering the same connection as a running import. (#2700)
  • Startup commands, query timeout, database and schema lost after a health check quietly reconnected. (#2700)
  • Table transfer abortable by Stop from an unrelated tab, part-applied. (#2700)
  • SQLite, DuckDB and Teradata connections pinged every 30 seconds despite opting out of health checks. (#2700)
  • Data grid dropping the UTC offset from a timestamp with time zone value. (#2702)
  • Edits accepted on a SQLite remote file, which only ever changed the local copy. (#2030)
  • Oracle TIMESTAMP values carrying a Z the column never stored. (#2702)
  • Timestamp shown an hour late, and its time lost on an edit, when the value falls in the reader's daylight-saving gap. (#2702)
  • Timestamp stored on a day the reader's time zone skipped rendering as raw text with no date picker. (#2702)
  • Sub-second precision missing from timestamp cells, merging distinct values into one entry in the column filter. (#2702)
  • Grid cells still reading in the old time zone after the Mac's time zone changed. (#2702)
  • Connection colour set on an iPhone not showing on the Mac, and the reverse.
  • Connection still reading as read-only on an iPhone after read-only was turned off on the Mac.
  • Window rebuilding its own layout three times while a connection opens.
  • Connecting screen naming the wrong step for the first half second of a connect.
  • Spinner flash in the object browser on Oracle, Snowflake, BigQuery, Trino and Dameng.
  • Start of every line hidden in the SQL editor after a long line was removed. (#2709)
  • Query error underlines on the wrong text or missing after a tab switch or loaded query, with no way to read them.
  • Start of a line hidden under the line numbers after moving to it in a horizontally scrolled editor.
  • Editor jumping sideways on each keystroke in a long line while scrolled horizontally.
  • Cursor left off screen after pasting a long line.
  • Option+Delete and Option+Arrow splitting an emoji or accented letter in the SQL and JSON editors.
  • Line number column keeping a stale width after the line count drops below 1,000 or the font size changes.
  • BigQuery statements broken by an apostrophe or a backslash in a value or filter.
  • BigQuery grid inserts writing __DEFAULT__ into columns, and saving byte values as NULL.
  • BigQuery grid edits failing with type errors after a reconnect.
  • BigQuery grid edits matching more rows than the edited one when a value started with { or [.
  • BigQuery filters with starts with, ends with, not contains, between, regex or is empty ignored.
  • BigQuery No limit query timeout stopping jobs after 30 seconds.
  • BigQuery Google sign-in opening the browser again on every connect.
  • Crash reading a malformed BigQuery service account key.
  • ARRAY<BOOL> columns opening a checkbox editor, and BYTES columns editable as text.
  • Line after the data grid's row numbers drawn twice as thick as the other column lines.
  • # heading in the data grid darker and dimmer than the headings beside it.
  • Row numbers showing the scrolled columns through them on every other row in dark mode.
  • Row numbers keeping the selection's accent colour after the data grid lost focus.
  • Clicks and double-clicks below the last row ignored in the row-number column.
  • Column headings out of line with their columns after moving to a column hidden under the row numbers.
  • Data grid row menu instead of the Structure menu when right-clicking a pinned row number on the Structure tab.
  • VoiceOver finding no row over a pinned row number.
  • Column lines showing through the row numbers below the last row.
  • Empty rows below the last row striped brighter than the rows in dark mode.
  • Row numbers keeping their old stripes after turning alternate rows off or changing the row height.
  • TablePlus imports of SQL Server, CockroachDB, Cloudflare D1, libSQL and Elasticsearch typed so they never connect.
  • DuckDB file connections imported from TablePlus without their file.
  • Unsupported engines imported silently and checked by default, or dropped from a Beekeeper Studio import.
  • Import preview calling an unrecognized database type "not installed".
  • Imported connections unable to connect when the source app spelled the engine name in a different case.
  • Wrong default port on Redshift and CockroachDB connections imported without one.
  • Object browser replaced by "No Tables" for a database with procedures but no tables.
  • Procedures, functions and triggers missing from the object browser on Oracle, Snowflake, BigQuery and Dameng.
  • Empty schema list labelled "No Datasets" on Oracle, Snowflake, Dameng and Trino.
  • Connect error blaming a missing plugin for a connection whose database type is not recognized.
  • Connecting silently switching a disabled plugin back on.
  • Plugin install error replaced by "not installed" when connecting.
  • Test Connection doing nothing after installing the plugin it asked for.
  • Safe Mode and run buttons misreading statements beside invisible characters, CRLF or MySQL conditional comments.
  • Connecting removing a plugin that failed to load, and its settings, when no replacement could be downloaded.
  • Disabled plugin's code loaded when a connection looked up its driver.
  • Failed connect from an opened file or URL titled "Disconnected", with Reconnect as its only fix.
  • Database error messages hiding invisible characters, such as a backspace quoted back from a query. (#2717)
  • Connection Failed alert covering the window that already showed the same failure.
  • Invisible control characters typed into a query by an input method or a Control-key chord such as Ctrl+Option+H. (#2717)
  • Escape and Tab taken from an input method mid-composition in the SQL editor, and AI suggestions shown during it.
  • Statement with a NUL character running only up to it on SQLite and PostgreSQL, dropping its WHERE clause. (#2717)
  • Vim Replace mode writing an invisible character for Backspace and keypad Enter. (#2717)
  • Option and Control chords editing text in Vim Normal and Visual mode, and Vim's Ctrl commands never running. (#2717)
  • Line and paragraph separators (U+2028, U+2029) shown as line breaks the database does not see. (#2717)
  • Stop on Cloudflare D1, libSQL and Trino cancelling a sidebar read instead of the running query.
  • Numeric-looking filter values sent unquoted to text columns when a table first opens or after a foreign key jump.
  • Missing column comments, identity flags and generated flags on PostgreSQL views, partitioned and foreign tables.
  • Wrong primary key columns when another table reuses the key's constraint name on PostgreSQL and Redshift.
  • Restore reported as failed after a complete restore into a PostgreSQL server older than pg_restore.
  • Garbled non-Latin text saved to MySQL and MariaDB servers that force a Latin 1 session. (#2725)
  • Garbled non-Latin text when restoring a MySQL or MariaDB SQL export through a Latin 1 client. (#2725)
  • Curly quotes, € and other Windows-1252 symbols shown as invisible characters after SET NAMES latin1.
  • Illegal mix of collations comparing a column with a user variable on MySQL 8.
  • GEOMETRY values from a parameterized MySQL query shown as raw bytes.
  • Earlier row's text repeated in later rows of a parameterized MySQL query once a value passed 64 KB.
  • Wrong row deleted or updated after an edit took a row out of a column value filter.
  • Garbled non-ASCII text on PostgreSQL databases not encoded in UTF-8 after RESET ALL or DISCARD ALL.
  • Garbled or double-encoded non-ASCII text on iOS with PostgreSQL databases not encoded in UTF-8.
  • Garbled non-ASCII text when restoring a PostgreSQL SQL export into a database not encoded in UTF-8.
  • Display As formats and foreign key labels lost on a rename, and kept with column layouts after deleting a connection.
  • Foreign key value picker failing to read a referenced table in another MySQL database. (#2768)
  • MySQL table reached through a foreign key keeping its own filters, column layout, highlight rules and Display As formats. (#2768)
  • Referenced database shown as a schema in a MySQL tab title and in the foreign key picker's header. (#2768)
  • Composite foreign keys listing mismatched column pairs on iOS, CockroachDB and Redshift.
  • Foreign keys missing on iOS for a PostgreSQL role that does not own the table.
  • Redshift foreign keys from other schemas shown on a table.
  • PostgreSQL view definitions without security_barrier, security_invoker or the check option. (#2726)
  • PostgreSQL view definitions that bind to another schema's tables when run elsewhere. (#2726)
  • CREATE TABLE in Structure > DDL for a PostgreSQL view or materialized view. (#2726)
  • Edit View Definition in the Database menu opening a same-named view from the browsed schema. (#2726)
  • Edit View Definition enabled in the Database menu on a read-only connection. (#2726)
  • Enum types and sequences written in front of a PostgreSQL view's DDL. (#2726)
  • Garbled ClickHouse text whenever another value in the same result held binary data.
  • Carriage returns, quotes, NUL bytes and Enum type names shown with backslash escapes on ClickHouse.
  • Edits and deletes matching no row on ClickHouse tables with a binary value in the row.
  • Binary ClickHouse values written as replacement characters by an export, an object copy and a compare. (#2725)
  • ClickHouse export with a Row limit failing with a syntax error. (#2725)
  • Non-ASCII SQL Server filter values turned into ? and matching the wrong rows on non-Unicode collations.
  • Empty structure, missing indexes and failed renames for non-ASCII SQL Server object names on non-Unicode collations.
  • Changing a defaulted SQL Server column failing when a name contains a quote or non-ASCII text.
  • CockroachDB DDL, view definition and index reads ignoring the schema of an object outside the current schema. (#2726)
  • Silent replay of a PostgreSQL statement on a new connection after a drop, a lost COMMIT reported as saved included.
  • Query timeout and startup commands missing after the PostgreSQL driver reconnected on its own.
  • Server Dashboard sessions, metrics and slow queries failing on PostgreSQL 9.6 and earlier.
  • One unanswered metric emptying the whole Server Dashboard metrics panel on PostgreSQL, Redshift and CockroachDB.
  • MCP get_server_dashboard reporting a panel the server could not read as an empty list.
  • Backup and restore failing on PostgreSQL 9.1 when the pg_dump or pg_restore found first is version 15 or later.
  • Missing execution time in query plans on PostgreSQL 9.3 and earlier.
  • Cross-engine copy and JSON import creating jsonb columns on PostgreSQL 9.3 and earlier.
  • SQL Server edits and deletes matching no row when the row is identified by a binary column.
  • SQL Server parameters sent to the wrong placeholders when a column name holds a question mark.
  • Maintenance offered on views and sequences, where the server skips or refuses it. (#2726)
  • Maintenance running against a same-named object in another schema. (#2726)
  • Maintenance SQL preview showing a statement the app never runs. (#2726)
  • [ in a SQL Server filter value read as a wildcard.
  • Non-ASCII text turned into ? by Copy as INSERT, Copy as IN, compare scripts and column defaults on SQL Server.
  • Structure tab offering column, index and constraint edits that views and materialized views refuse. (#2726)

Removed

  • Focus Border color in the theme editor.

Security

  • TablePlus connections set to VERIFY-IDENTITY or VERIFY-FULL imported with TLS turned off.
  • BigQuery Google sign-in accepting an authorization response without PKCE or a state check.
  • PostgreSQL sessions inheriting standard_conforming_strings = off, which let a backslash break out of any quoted literal.
  • PostgreSQL catalog, comment and password literals escaped by quote doubling alone, which a backslash can break out of. (#2726)
  • An MCP token without Full Access approving its own write and skipping TablePro's confirmation dialog.

Don't miss a new TablePro release

NewReleases is sending notifications on new releases.