Docs · DBCatz

Databases, tables and structure

The DBCatz sidebar — the database picker, the table list and its bulk actions — and the Structure tab with columns, indexes, foreign keys and CREATE.

The sidebar of a connection tab is where you pick a database and a table; the Structure tab is where you change them. The words follow the engine — collection on MongoDB, index on Elasticsearch, file for a SQLite folder — and Redis has keys instead of tables (see Redis and Valkey).

The sidebar header

The connection’s engine logo and name, its PROD or READ-ONLY badge, the server version, and Disconnect (closes the connection and any SSH tunnel).

The database picker

Click the database name, or press Database → Choose Database… (mod+P).

  • Search — Search N databases; the count shows matches (3 of 124) and the matched part is bold.
  • Keys — ↑ / ↓, PgUp / PgDn, enter to open, Esc to close.
  • ★ Star — Star: keep at the top. Starred and Recent databases are grouped first, per connection.
  • Your databases come next, then System — the server’s own, with a built in badge, folded when there are many.
Engine System databases
MySQL / MariaDB information_schema, mysql, performance_schema, sys
PostgreSQL postgres, template0, template1
MongoDB admin, config, local

Next to the picker:

  • ↻ — Reload the databases and tables (mod+R, Database → Refresh).
  • + — create a database (below). Not for Redis, Valkey or Elasticsearch, and off on a Read-only connection.

On Redis and Valkey the picker lists db0 … dbN with their key counts. On Elasticsearch the “database” is the cluster itself. A SQLite folder lists each file as a database.

The table list

  • Filter tables narrows the list.
  • The count’s tooltip says N of your own, M built in.
  • + New creates a table.
  • Each row shows the table’s rows, short (1.2k); hover for rows and size.
  • Views and materialized views are listed as views. PostgreSQL tables outside public show as schema.table.

Your own tables come first. System tables are grouped apart, folded, with a built in badge: information_schema, performance_schema and sys, the server’s tables in mysql, sqlite_* tables, MongoDB’s system.* collections and Elasticsearch’s dot indices.

The table menu

Right-click a table:

  • Show Data (mod+1) · Show Structure (mod+2)
  • Copy Name · Copy CREATE Statement
  • Export Table…
  • Rename Table… — the Rename <table> prompt asks for a New name. MongoDB renames the collection.
  • Duplicate Table… (Duplicate Collection… / Duplicate Index… on MongoDB and Elasticsearch; not for views) — Duplicate <table> asks for a New name (<table>_copy to start with) and has Copy the rows too, on by default. SQL tables keep their columns, keys and indexes; foreign keys and triggers stay with the original. An Elasticsearch index keeps its mappings and analysis settings, a MongoDB collection its indexes. On a Production connection it asks first, like any write.
  • Truncate Table… — not for views.
  • Drop Table…

The same actions are in the Table menu of the menu bar. Truncate and drop ask you to type the table’s name — see Dropping and emptying.

Select several tables

  • ⌘-clickCtrl-click adds or removes a table.
  • ⇧-clickShift-click picks a range.
  • mod+A (Edit → Select All, with the list focused) picks every table shown.
  • Esc clears the selection.

A bar appears: N selected · right-click for actions, with ✕ to clear.

Bulk actions on several tables

Right-click the selection for the menu titled N Tables Selected:

Action What it does
Export N Tables… Opens Export with those tables ticked.
Copy Names Copies the table names.
Copy CREATE Statements SQL engines only.
Count Rows Opens a new Query editor with a UNION ALL of COUNT(*) per table, so you get exact counts.
Optimize N Tables… OPTIMIZE TABLE (MySQL / MariaDB), VACUUM (ANALYZE) (PostgreSQL) or ANALYZE (SQLite) — run through Run, so the usual checks apply.
Truncate N Tables… Empties them.
Drop N Tables… Drops them.

On a Read-only connection the writes are greyed out, marked Read-only connection.

Truncate and drop go child-first, so tables that point at others are handled before the tables they point at. You type the database’s name to confirm — or the connection’s name on Production.

Force — disable integrity checks lets them go through when foreign keys are in the way:

Engine What Force does
MySQL / MariaDB FOREIGN_KEY_CHECKS = 0 for the operation.
PostgreSQL CASCADE — dependent constraints and views go too, and a truncate also empties the tables that reference them.
SQLite foreign_keys = OFF for the operation.

Without Force, a table outside your pick that points at one of them makes DBCatz refuse.

The sidebar foot

Button Shortcut What it does
Query (Redis: Command) mod+T A new query editor.
Logs mod+L The Logs tab.
Export mod+E Export…
Import mod+I Import…
↻ mod+R Reload the databases and tables.

Above the view sits the breadcrumb — db › table and the row count — and the view tabs Data · Structure · Query · Logs (Redis / Valkey: Keys · Command · Logs).

The Structure tab

Table → Show Structure (mod+2). The sections depend on the engine.

Columns

SQL engines show Columns. MongoDB shows Fields (from a sample of documents) — read from the first 100 documents, since a collection has no fixed columns. Elasticsearch shows the index’s Mapping.

Column What it shows
Name With PK, UQ and FK badges.
Type The column type.
Null Whether it allows NULL.
Default The default value.
Extra Auto increment, other extras, the collation and the comment.
Change and Drop.

Add or change a column

+ Column adds one; Change edits one — including its name, since renaming happens there.

  • Name.
  • Type — a type picker: a grouped dropdown of the engine’s types, then length or precision and scale, the values of an ENUM or SET, and modifiers such as UNSIGNED.
  • Default — empty = none; expressions like CURRENT_TIMESTAMP work.
  • Allows NULL.
  • Auto increment — when adding.
  • Character set, Collation and Comment.
  • Unique.

Every change goes through the structure checks before the ALTER runs.

Per engine:

  • SQLite — changing an existing column is not possible: the dialog says SQLite cannot change a column. Its collations are BINARY, NOCASE and RTRIM, and it has no column comments.
  • PostgreSQL comments are set with COMMENT ON COLUMN.

Column display order

Drag ⠿ to set the order columns are shown in, here and in the Data grid. It is a view setting for you — not an ALTER; the table is untouched. Reset order puts it back.

Indexes

For SQL engines and MongoDB: Name, Columns and Kind (primary, unique, index), with Drop primary key or Drop index.

+ Index opens Add index: a Name (optional), Columns (in order) with + Column, and Unique.

Foreign keys

For SQL engines: Name, Columns, References, On delete and On update. This list is read-only — foreign keys cannot be added from the Structure tab; write the ALTER TABLE … ADD FOREIGN KEY in the Query tab.

CREATE statement

The table’s CREATE statement (SQL) or its Definition (other engines), with Copy.

Create a table

Table → Create Table… (mod+shift+T), + New in the table list, or Create table on an empty database. The dialog is Create

in <db>.

Each column row has Name, Type, Null, Default, PK, Auto (auto increment), UQ, ⋯ for character set, collation and comment, and ✕ to remove it. Below: + Column, and + Timestamps (SQL engines) to add created_at and updated_at columns in one go.

  • Elasticsearch — the fields become the new index’s mapping; leave them empty for a dynamic mapping.
  • MongoDB — just a name: A collection has no fixed columns.

Create a database

Database → Create Database… (mod+shift+N) or + next to the picker. Give it a Name, and:

  • MySQL / MariaDB — Character set and Collation, utf8mb4 / utf8mb4_unicode_ci by default. The hints tell you which collations are case-insensitive, binary or case-sensitive.
  • PostgreSQL — Encoding and Collation (server default; it sets LC_COLLATE and LC_CTYPE). Values other than the default use template0.
  • MongoDB — a database exists once it has a collection.

There is no Create database on Redis, Valkey or Elasticsearch. Database → Drop Database… asks you to type the name.

Last updated 2026-11-03