Skip to main content
Dropping a table cannot be undone, and Cascade in the confirmation dialog widens it to every table that depends on this one. The dialog runs nothing on its own, though: the drop is staged on the table’s row and reaches the server when you save.

Create a table or view

Click + at the foot of the sidebar and choose New Table… or New View…, or use Database > New Table… and Database > New View…. New Table… opens the visual structure editor (see Table Structure); on DynamoDB it opens a form for the keys, capacity and indexes instead. New View… opens a query tab holding a CREATE VIEW template for the engine. The same + menu carries New Schema… and New Database… where the engine has them, and New Folder for sidebar folders. The sidebar’s right-click menu over empty space holds the same items. Safe mode dims them in the + menu and the menu bar, and removes them from the right-click menu. An item the engine cannot do is left out: Redis and Kafka get no New Table…, and an engine without views gets no New View….

Drop and truncate

Right-click a table and choose Delete to drop it, or Truncate to empty it and keep the structure. Database > Truncate Table and Option+Delete do the same. Cmd-click to select several tables first and one confirmation covers all of them, with the same options applied to each. Confirming with Drop or Truncate stages the operation. The row picks up a red minus badge for a pending drop, an orange exclamation badge for a pending truncate. Preview SQL (Cmd+Shift+P) shows the statements, Save Changes (Cmd+S) runs them alongside any pending cell edits, and choosing the same menu item again takes the table back out of the queue. Once a drop reaches the server, the table leaves the sidebar and completion, and every tab showing it closes, in every window on the connection.
Drop table dialogDrop table dialog

Drop table confirmation with options

Dropping is irreversible. On MySQL and MariaDB, truncate also resets the auto-increment counter. Back up important data first.

Rename

Renaming happens in the row itself. Choose Rename from a table’s right-click menu and the label becomes a field: Return commits, Escape leaves the name alone, and clicking elsewhere commits. The item is absent where the engine cannot rename that kind of object. The statement runs at once instead of joining the drop and truncate queue, so Preview SQL never shows it. Everything bound to the table follows the new name: open tabs keep their rows, filters, sort and column widths, a favourite stays a favourite, and the Recent entry holds its place. A drop or truncate already queued against that table comes back out of the queue.
A sidebar table row with its label replaced by an editable text fieldA sidebar table row with its label replaced by an editable text field

The row's label becomes the rename field

No other engine has a rename, so the item never appears on Bigtable, Cassandra, DynamoDB, Elasticsearch, etcd, Firestore, the Firebase Realtime Database, Kafka, Redis, SurrealDB, Typesense or Beancount. What resembles one there is a copy followed by a delete, and it changes record identity. Rename Database and Rename Schema are absent on the container the connection is browsing. Switch to another one first, then rename the one you left.

Drop or rename with SQL

A DROP TABLE, DROP VIEW, ALTER TABLE ... RENAME TO, RENAME TABLE or SQL Server sp_rename run in a query tab, or by an MCP client, counts as a sidebar drop or rename once it commits. Tabs on the table close or take the new name, and its saved filters, column layout, highlight rules, value formats, foreign key label columns, folder, saved import mapping, Generate Rows settings, favorite, Recent entry and Table Health history go with it. A drop that is rolled back leaves all of them in place. So does every drop in a run that ends inside a transaction, every drop on a SQL Server session with IMPLICIT_TRANSACTIONS on, and every drop in a SQL Server script that uses IF, WHILE, GOTO, RETURN or TRY...CATCH. A SQL file run through Import Data, or a restored backup, refreshes the sidebar and keeps every table’s settings. This works on MySQL, MariaDB, PostgreSQL, Redshift, SQLite, SQL Server, Oracle, ClickHouse and DuckDB. On PostgreSQL, Redshift and SQL Server, name the schema, as in public.orders, and on DuckDB the database and the schema, because a bare name there resolves through session state such as the search path or the login’s default schema. On the other engines a name stops being followed once something on the connection could have redirected it: a temporary table of the same name, a procedure call or anonymous block, or a statement that changes the current schema, whether it ran in a query tab, in the connection’s Startup Commands or in an imported SQL file. A rename written with IF EXISTS is never followed, since it succeeds when there was nothing to rename.

Maintenance

Right-click a table, choose Maintenance, and pick an operation. The sheet shows the operation’s options and the statement the driver will run, rebuilt as each option changes, so what is previewed is what executes. Each operation lists the object kinds it applies to, so a view offers only the operations its server accepts. On PostgreSQL that means VACUUM and REINDEX are absent on a view, which the server skips or refuses, and CLUSTER is absent on a partitioned table, which can never be clustered. An operation that acts on the whole database, such as SQLite’s VACUUM and its integrity check, names the database rather than a table. PostgreSQL VACUUM carries FULL (rewrites the table and blocks access), ANALYZE, and VERBOSE toggles. MySQL CHECK TABLE offers QUICK, FAST, MEDIUM (the default), EXTENDED, and CHANGED. The options come from the driver, so an engine that adds one shows it without an app change. No other engine reports maintenance operations, so the submenu is hidden there, and in read-only safe mode. A run that comes back clean shows nothing more. When the server answers with a note, such as MySQL’s “Table does not support optimize, doing recreate + analyze instead” or a problem SQLite’s integrity check found, a sheet lists it.

Generate test rows

Right-click a table and choose Generate Rows… to fill it with made-up data. Set the number of rows, from 1 to 1,000,000, pick a generator for each column on the left, and check the first 10 rows in the preview before anything runs.
The Generate Rows sheet listing a table's columns, the options for the selected column and a preview of ten rowsThe Generate Rows sheet listing a table's columns, the options for the selected column and a preview of ten rows

Generate Rows with a column's generator and the preview

Each column starts from its type and name: an email column gets addresses on the reserved example.com, example.net and example.org domains, created_at gets dates in this year and the four before it, an enum gets its own labels, and an integer key gets a sequence that starts after its largest value. Keep those unless the data needs a shape of its own. The sheet keeps every constraint the table declares, and stops Generate with the column’s name when a setting cannot:
  • A primary key or unique column never repeats, and neither does a key over several columns. A range or list with fewer values than rows is refused up front.
  • A foreign key column picks from the first 10,000 keys of the referenced table. A NOT NULL key into an empty table is refused.
  • Identity, auto-increment, serial, SQLite INTEGER PRIMARY KEY and generated columns are left to the server.
  • A nullable column takes a NULL ratio.
The same seed and settings give the same rows, as long as the referenced tables hold the same keys. After a run that adds rows, the sheet moves to a new seed and starts each key sequence after the rows just added, so a second run does not collide with the first. The result names the seed that made the rows; type it back in to make them again. Generate inserts the rows in batches inside one transaction, with a progress bar. Cancel rolls the transaction back and nothing is kept, except on an engine without transactions, where the rows inserted so far stay. The run is a write like any other for Safe Mode: a read-only connection has no Generate Rows…, and a mode that confirms writes asks first. Open in Query Editor puts the INSERT statements in a new query tab instead, for up to 10,000 rows. The settings are saved per table for the next time.

Views

Views carry an eye icon in the sidebar; materialized views and foreign tables get their own. All three are read-only kinds, so their menus drop Truncate and Import, and the drop item reads Drop View, Drop Materialized View, or Drop Foreign Table. Dropping removes the definition only, and the data in the underlying tables stays. Click + at the foot of the sidebar and choose New View… to write a new one; right-click an existing view and choose Edit View Definition to open the current definition in a query tab. Either way, execute the statement to apply it. Show DDL opens the definition in a read-only tab, with Copy, Export and Open in Editor on it; Copy DDL puts the same statement straight on the clipboard. Both stay available on a read-only connection, where Edit View Definition is hidden. A materialized view holds stored rows, so refreshing it is a server operation. Right-click one and choose Refresh Materialized View…, or use Database > Refresh Materialized View…. The confirmation names the view and warns that other sessions cannot read it while the refresh runs. Refresh concurrently leaves readers alone; it is available on PostgreSQL for a view that has been populated and carries a unique index on plain columns with no WHERE clause, and the alert says which of the two is missing when it is dimmed. Tabs showing the view reload when the refresh finishes. A plain view stores nothing, so Cmd+R re-runs its query instead. Comments are edited per object. Right-click a table or view and choose Edit Comment…, or open its Structure view with nothing selected and type in the inspector’s Comment field; saving an empty field removes the comment. Column comments live in the Columns section. Engines installed as plugins need their latest plugin version.

Sequences

PostgreSQL and MariaDB sequences are listed under Sequences in each schema, with a number icon. Hover one to see the column that owns it, such as orders.id for a serial or identity column. The sidebar filter and Open Quickly find sequences by name. Double-click a sequence to open it. On PostgreSQL the grid shows last_value, log_cnt and is_called, and the DDL tab of Show Structure holds the CREATE SEQUENCE statement with the data type, start, increment, minimum, maximum and cache, followed by OWNED BY and the setval that restores its position. On MariaDB the grid shows every setting. A sequence is a read-only kind: its menu drops Truncate and Import, the Structure tab offers no edit, and the drop item reads Drop Sequence. Rename works on both engines. On PostgreSQL, right-click a sequence for two more commands, also under Database > Set Next Value… and Database > Edit Sequence…:
  • Set Next Value… sets what the next nextval returns. For a sequence a column owns, After the values already in moves it one step past that column’s highest value, or its lowest for a descending sequence, which repairs a sequence that fell behind its table after a bulk load or a restore. It never moves a sequence back, and it holds inserts into the table until it is done. To move a sequence back, type the value.
  • Edit Sequence… shows the data type, start, next value and owner, and changes the increment, minimum, maximum, cache and cycling through ALTER SEQUENCE.
Both sheets show the SQL before it runs and go through Safe Mode. New Sequence… under the + button at the foot of the sidebar, or Database > New Sequence…, opens a CREATE SEQUENCE template in a query tab. MariaDB refuses UPDATE, DELETE and TRUNCATE on a sequence with error 1031, and ALTER TABLE … ADD COLUMN with error 4086. Rename goes through RENAME TABLE. Change a MariaDB sequence’s value with SETVAL in the query editor.

System-versioned tables

A MariaDB table declared WITH SYSTEM VERSIONING stays an ordinary table: row editing, Import, index edits, comments, rename and drop all work. Truncate alone is withheld, because the server refuses it with error 4137. Delete the history with DELETE HISTORY FROM table_name instead. On iPhone and iPad the listing reports such a table as a plain one, so Truncate is offered there and the server’s refusal comes back as an alert.

Databases and schemas

Cmd+K switches database, covered in Managing Connections. The switcher takes the engine’s own vocabulary: Schema on Oracle and Spanner, Keyspace on Cassandra, Dataset on BigQuery, Instance on Bigtable, Namespace on SurrealDB. SQLite is file-based, so it points at the welcome window to open a different file.
Database switcher popoverDatabase switcher popover

Database switcher with search

New Database… at the bottom of the switcher creates one. Its fields come from the driver: MySQL and MariaDB ask for a name, character set, and collation; other engines show their own. The button is absent where the engine cannot create databases. To drop one, right-click it in the switcher or the sidebar tree and choose Drop Database “name”…. The item is missing for system databases and for the database you are connected to, so switch away first.
Dropping a database permanently deletes every table in it. The server rejects the drop if your account lacks the privilege.

Several at once

Shift-click for a range, Cmd-click to add or remove one, and the menu counts what it covers: Drop 3 Databases…, Copy 3 Names. Refresh reloads every selected database. Export… opens the export dialog with every table of the selected database already selected, one database at a time; it is absent on DuckDB and PGlite for any database other than the active one. Use as Active Database appears only when a single row is selected and it is not already active. Databases the server will not drop are left out of the drop item. A drop that fails partway finishes the rest, then reports which ones failed and why.

Schemas

On engines that group tables by schema, the same menu appears on a schema row: PostgreSQL, SQL Server, SurrealDB, and Dameng. PostgreSQL and Dameng drop the schema with CASCADE. SQL Server has no cascade, so it refuses to drop a schema that still holds objects; drop those first. The confirmation only promises to take dependent objects with it on the engines that do.
Dropping a schema permanently deletes everything in it. On PostgreSQL and Dameng it also drops objects in other schemas that depend on it.

Creating and editing a schema

New Schema… and Edit Schema… sit on the schema row’s menu, at the bottom of the schema switcher, and under Database > Schema. Both open a sheet whose last section is the statements it will run. A schema on Oracle is a user, so it is created in Users & Roles rather than here. Redshift and CockroachDB report an owner and a comment but no privilege grid, because neither reads a schema ACL the way PostgreSQL does. Only the boxes you change produce SQL: a role you never touch generates neither a GRANT nor a REVOKE. The grid is re-read against the server at the moment you press Save, so a grant another session added while the sheet was open survives. A checked box is dimmed when another role granted that privilege. REVOKE removes only what the role you are connected as granted, so clearing such a box would run a statement that succeeds and leaves the access in place. Connect as the granting role, or as a member of it, to change those. System schemas are refused for create, edit, rename and drop.