Browse documentation

Reference

Questions this app answers

These answers connect common database and file-management jobs to the Bobby Tables feature that handles them.

Answers

What is a good PostgreSQL GUI for Linux?

Bobby Tables runs natively on Linux x86_64 as a Debian package or an AppImage, and connects to PostgreSQL, CockroachDB, MySQL, MariaDB, TiDB, Microsoft SQL Server, ClickHouse, Snowflake, SQLite and Google BigQuery. It browses catalogs, edits rows where the engine exposes safe identity, and runs SQL or GoogleSQL. The Debian package is the primary Linux build.

Is there a TablePlus alternative that works on Ubuntu?

Bobby Tables is a desktop database client for macOS and Linux, with a Debian package tested on Ubuntu 22.04 and later. It covers the same core loop: browse the catalog, edit rows in a grid, read the generated SQL before committing, run SQL with schema-aware autocomplete. It adds a dual-pane file manager for S3 and SFTP.

Which database clients are not a subscription?

Bobby Tables is licensed rather than rented. The app keeps running when a license lapses, using its unlicensed connection caps instead of locking you out. Using it without a license has no expiry date and needs no account. The pricing page carries the current terms and amounts.

How can I edit rows in a MySQL table without writing UPDATE statements?

Open the table and change cells in the grid. Cmd+I or Ctrl+I adds a row, Cmd+D duplicates one, and Backspace deletes the selected rows. Edits stay in a pending buffer until Cmd+S or Ctrl+S commits them in one transaction. A table with no primary key or unique index stays read-only, with a banner saying why.

How do I see the SQL a GUI is about to run before it runs it?

Bobby Tables stages every grid edit in a pending buffer and renders the statements from it. Cmd+Shift+P or Ctrl+Shift+P shows the exact SQL before anything is sent, and Cmd+S commits the buffer in one transaction. Cmd+Shift+Backspace discards it. The console log lists every statement the app has already executed.

How do I connect to a Postgres database through an SSH bastion?

Turn on the SSH tunnel section of the connection and point it at the bastion. Host aliases, users, ports, identity files and one ProxyJump hop are read from ~/.ssh/config, and authentication can be ssh-agent, a key file or a password. Host keys are checked against known_hosts, with a prompt the first time.

How can I browse a JSON column as a tree instead of one long string?

Press Space on a row to open the row inspector, which renders a JSON field as an expandable tree with expand all, collapse all and wrap in the panel menu. Cmd+C copies the focused value and Cmd+Shift+C copies its subtree as JSON. Any field can be switched back to its exact stored text.

How do I follow a foreign key from a row to the row it points at?

In the row inspector, a foreign key expands the referenced row directly beneath the field, so a chain of four tables reads as one panel rather than four tabs. Loaded rows are reused, so many rows sharing one parent cost one query. Expansion goes up to ten hops deep and the rows shown are read-only.

How do I make a query result show a checkmark, a star rating or a currency without changing the data?

Suffix the column alias with a display directive. Selecting a column AS "paid__format__check" draws a checkmark under a heading that still reads paid, and money, stars, progress, unixtime, link, email, image and enum work the same way. The stored value is untouched, and copy and export use it rather than the rendering.

How do I draw an ER diagram of an existing Postgres or MySQL database?

Open View, Schema Diagram (Cmd+Ctrl+E on macOS, Ctrl+Alt+E on Linux), or start from a schema or a table in the sidebar. The diagram reads metadata only and draws a line only where the database declares a foreign key. It saves as PNG or goes to the clipboard. A license is needed for it.

How do I dump a Postgres database without installing pg_dump?

Choose Create snapshot on the connection. The built-in engine reads every table inside one repeatable-read, read-only transaction and writes a plain SQL script that psql replays, with no external tool involved. Where pg_dump is installed it is offered as an alternative engine. There is no restore button; the finished job shows the command.

How do I take a consistent MySQL dump without locking tables?

A snapshot starts a consistent snapshot inside a read-only transaction, which is what mysqldump does with a single transaction. LOCK TABLES and FLUSH TABLES WITH READ LOCK are never issued. Only transactional tables are point-in-time consistent, so the preflight lists every non-InnoDB table in scope by name before you start.

How do I back up a database straight to S3 without staging it on my laptop?

Pick an S3 or SFTP connection as the snapshot destination. The dump is streamed as it is read, so nothing is written to this computer first and a database larger than your free disk space can still be snapshotted. The one exception is a SQLite page copy, which is staged locally and says so.

How do I copy files between an SFTP server and an S3 bucket?

Open the SFTP server in one pane of the Files workspace and the bucket in the other, then copy with F5 or drag the selection across. Transfers between two different servers relay through the app, and the confirmation and the job row both say so. Progress is shown and the job can be cancelled.

How do I copy an S3 object over 5 GB between buckets without downloading it?

Copy it between two panes on the same S3 account. The copy is performed by S3 itself, using multipart copy above the 5 GB single-request limit, so the bytes never cross your network. The route is shown in the confirmation and again on the job row, so you can tell before it starts.

How do I back up one S3 bucket to another on a schedule I run myself?

Save a bucket backup between two S3 connections and start it whenever you want. A timestamped run writes a dated folder; a mirror run copies what changed and can delete what the source no longer has. Nothing runs in the background: every run is one you start. Interrupted runs resume where they stopped.

How do I mirror a Cloudflare R2 bucket to Backblaze B2?

Add both as S3-compatible connections, then save a bucket backup from one to the other in mirror mode. Because the accounts differ, the objects relay through the app, and the dialog says so before the first object moves. Storage classes are checked against the destination before the run rather than partway through it.

How do I empty a versioned S3 bucket, including delete markers and unfinished multipart uploads?

Choose Empty bucket on the S3 connection. It removes objects, old versions, delete markers and the unfinished multipart uploads that interrupted transfers leave behind, deleting while it lists so millions of objects take one pass. You have to type the bucket name before it starts, and deleting the bucket itself is a separate checkbox.

How do I add all my Cloudflare R2 buckets to a client at once?

Choose Import buckets from Cloudflare on the welcome screen and paste one Cloudflare API token. The importer finds buckets across every account and jurisdiction the token reaches, derives the S3 credentials, marks the ones you already have, and verifies each bucket before saving it. The token is never stored.

Is there a dual-pane file manager for S3 and SFTP on macOS?

The Files workspace in Bobby Tables is two independent panes, each browsing an S3-compatible bucket, an SFTP server or a local folder, with transfers in either direction. Function keys follow the usual pattern: F2 rename, F5 copy, F6 move, F7 new folder, F8 delete. It runs on Apple Silicon Macs and on Linux.

Which database client keeps passwords in the macOS Keychain?

Bobby Tables stores database passwords, S3 secret keys and SSH key passphrases in the macOS Keychain, or the Secret Service on Linux, and keeps them out of its own configuration file. Where no keychain is available it says so in the connection form and asks for the secret on connect instead.

Which SQL client works on an Apple Silicon Mac natively?

Bobby Tables ships an arm64 macOS build, signed, notarized and stapled, for macOS 11 and later. It is the only macOS package. An Intel install is told that updates are not published for it rather than being offered one it cannot run.

Can I try it free without an account or a time limit?

Yes. Download it and use it with one saved database connection and one saved file connection, both open at once. There is no expiry date, countdown or account. Delete a connection to try another. The schema diagram is the one feature that needs a license; everything else is uncapped.

What does the app send over the network?

Activating a license sends the key, a machine identifier, your hostname, the platform and the app version to api.bobbytables.app. After that a licensed app sends its signed receipt back about once a day and on an update check. Without a license, only the update check is sent. There is no analytics and no crash reporting.

Does Bobby Tables run on Windows?

No. There is no Windows build and none is in progress. Bobby Tables runs on macOS on Apple Silicon, and on Linux x86_64 as a Debian package or an AppImage, needing WebKitGTK 2.48 or later. The AppImage is a secondary package and may fail on Mesa 25 or newer.

Which databases does Bobby Tables support?

Bobby Tables supports PostgreSQL, CockroachDB, MySQL, MariaDB, TiDB, SQL Server, ClickHouse, Snowflake, SQLite, BigQuery, Oracle, Redis, Valkey, Cassandra, ScyllaDB and MongoDB. MongoDB uses a native Extended JSON workspace with server pagination and staged writes; Redis and CQL providers also use native workspaces. Oracle requires Instant Client.

Can I open a SQLite file by double-clicking it?

Yes. Bobby Tables registers as an editor for .sqlite, .sqlite3, .db and .db3 files, so Open With reaches it on macOS and a Linux desktop file association does the same. The file opens as a connection without one being created by hand first.

How do I stop a client from running a DELETE by accident?

Set the connection to read-only, which opens a read-only session on the server and disables editing in the interface, or set safe mode to Warn writes or Warn all. Dropping and truncating from the sidebar always confirm and show the exact statement, and a production environment tag tints the window chrome.

How do I move my saved connections to a new computer?

Choose Export connections on the welcome screen, which writes one file encrypted with a password you choose, then Import connections on the other computer. Passwords are included only if you ask. There is no cloud sync: the file is the transfer, and an import is checked as a whole before anything is written.

How do I export a filtered table to CSV?

Filter the table with Cmd+F or Ctrl+F, then export. The scope choices are the whole table with its current filters, the current page, the selected rows and columns, or a query result, and the formats are CSV, JSON and SQL INSERT statements. Export writes the stored value, never the on-screen rendering.