Every feature JetBrains documents for Database Tools, woven into one cloth. Each square is a feature, in the order I think it matters to a day's work, left to right and top to bottom. The solid squares are supported, the hatched ones are what 1.0 still needs, and the seam is where 1.0 gets cut. Hover a square to see what it is; click it to find it in the list.
80of 252features supported
80 supported
37 before 1.0
125 after 1.0
10 not planned
The cloth, rank 1 to 252
1.0
What 1.0 means. The top 117 squares, the essential and important tiers, all solid, and the settings format frozen. That's 37 to go. Until then the extension stays in preview and a minor version may still change tablecloth.dataSources.
Next up Create/Modify Table · Full-text search across selected data sources/schemas/tables
The list
Essentialfelt every session
57 of 65 supported
1PostgreSQL, MySQL/MariaDB, SQLite data sourcesConnections
2Auth: User & Password, pgpass, No authConnections
10PK/FK/index icon combinations on columnsExplorer
11Refresh (Ctrl+F5)Explorer
12Jump to Query Console (Ctrl+Shift+F10)Explorer
13Edit Data (F4)Explorer
14Go to DDL (Ctrl+B)Explorer
15Export Data to FileExplorer
16SQL Scripts > Run SQL ScriptExplorer
17Query console per data source; create new (Ctrl+Shift+Q)Consoles
18Default console (F4 on source)Consoles
19Default schema / search_path switcher in console toolbarConsoles
20Execute statement at caret / selection (Ctrl+Enter) with statement frameRunning queries
21Run whole scriptRunning queries
22Statement chooser popup for nested statements + setting "When caret inside statement": Ask / Smallest subquery / Smallest / Largest / Whole script / Everything from caretBefore 1.0Running queriesexample
Choose the statement under the caret
With the caret inside a subquery, ⌘⏎ asks which statement you meant. A setting makes it stop asking: the smallest subquery, the whole statement, or everything from the caret.
console [acme.public] — acme
Database
DDL
acme-devPostgreSQL 17.9
acme
public
tables3
views1
shipped_orders
sequences3
object types2
acme-staging
acme-prodread-only
analytics
console [acme.public]
Tx: Auto acme-dev · acme.public
1SELECT s.customer_id, s.spent
2FROM (SELECT customer_id, sum(total) AS spent
3FROM orders
4WHERE status = 'shipped'
5GROUPBY customer_id) s
6WHERE s.spent > 500;
Choose statement to execute
SELECT customer_id, sum(total) AS spent FROM orders WHERE … GROUP BY customer_idsubquery
SELECT s.customer_id, s.spent FROM (…) s WHERE s.spent > 500whole statement
Always run: Ask · Smallest subquery · Largest statement · Everything from caret
0 0Tablecloth: 2 statements at the caretacme-dev · acme · publicLn 3, Col 18SQL
23Selection execution: single statement / separate statements / smart expand; "Execute Selection as Single"Before 1.0Running queriesexample
Run exactly the selection
Select part of a script and ⌘⏎ runs the selection: as separate statements, or as one when you ask. A setting decides whether a partial selection grows to whole statements first.
console [acme.public] — acme
Database
DDL
acme-devPostgreSQL 17.9
acme
public
tables3
views1
shipped_orders
sequences3
object types2
acme-staging
acme-prodread-only
analytics
console [acme.public]
Tx: Auto acme-dev · acme.public
1UPDATE orders SET status = 'shipped'WHERE id = 1042;
59Go to Database Object / Search EverywhereRefactoring & navigation
60Create/Modify Table dialog (columns, keys, indexes, FKs, checks, grants; SQL preview; pin tabs; open in console)nextBefore 1.0Objects & DDLexample
Modify Table, as a form
The Modify Table dialog edits columns, keys, indexes and constraints as a form and shows the ALTER statements it will run. Nothing runs until you press OK.
63Edit DDL source in a dedicated editor and Submit (Ctrl+K) with generated migration script previewBefore 1.0Objects & DDLexample
Edit DDL in place, submit a migration
Go to DDL opens the definition read-only today. Here the same document is editable: change the view's SELECT, press ⌘K, and Tablecloth shows the script it generated before anything runs.
shipped_orders.sql (DDL) — acme
Database
DDL
acme-devPostgreSQL 17.9
acme
public
tables3
views1
shipped_orders
sequences3
object types2
acme-staging
acme-prodread-only
analytics
shipped_orders.sqlDDLconsole [acme.public]
Submit ⌘KRevertCompare with Serveracme-dev · acme.publicTx: Auto
1CREATEORREPLACEVIEW public.shipped_orders AS
2SELECT o.id,
3 o.customer_id,
4 c.email,
5 o.status,
6 o.total,
7 o.created_at
8FROM orders o
9JOIN customers c ON c.id = o.customer_id
10WHERE o.status = 'shipped'::order_status;
11
Submit Changes
2 statements will run on acme-dev · acme.public
Server definition unchanged since you opened it at 10:42
-- column list changed; CREATEORREPLACE will not do
-- the view is recreated and its grants re-applied
DROPVIEW public.shipped_orders;
CREATEVIEW public.shipped_orders AS
SELECT o.id, o.customer_id, c.email,
o.status, o.total, o.created_at
FROM orders o
JOIN customers c ON c.id = o.customer_id
WHERE o.status = 'shipped'::order_status;
GRANTSELECTON public.shipped_orders TO reporting;
CancelOpen in ConsoleSubmit
0 0Tablecloth: DDL of view public.shipped_orders · 2 lines addedacme-dev · acme · publicLn 10, Col 42SQL
64Explain Plan (tree + table Query Plan tab, costs)Explain plan
Press ⌘⏎ on a blank line and nothing happens today. This makes it a choice: run the whole script, run everything below the caret, or keep doing nothing.
console [acme.public] — acme
Database
DDL
acme-devPostgreSQL 17.9
acme
public
tables3
views1
shipped_orders
sequences3
object types2
acme-staging
acme-prodread-only
analytics
console [acme.public]
Tx: Auto acme-dev · acme.public
1SELECT * FROM orders WHERE status = 'shipped';
2
3
4SELECT * FROM customers;
Nothing at the caret · run:
Do nothingdefault
Run the whole script
Run everything below the caret
0 0Tablecloth: no statement at the caretacme-dev · acme · publicLn 3, Col 1SQL
88Run Function / Run Procedure with Execute Routine dialog (parameter values, output to console/file)Before 1.0Running queriesexample
Run a routine with parameters
Execute Routine from the tree asks for each parameter with its type, and shows the call it will make.
In Playground mode a USE or SET search_path in the console changes what unqualified names mean from then on; in Script mode they resolve against the console schema. The mode sits in the toolbar.
console [acme.public] — acme
Database
DDL
acme-devPostgreSQL 17.9
acme
public
tables3
views1
shipped_orders
sequences3
object types2
acme-staging
acme-prodread-only
analytics
console [acme.public]
Tx: Auto Playground acme-dev · acme.public
1SET search_path TO archive;
2
3SELECT count(*) FROMorders;
PlaygroundUSE and SET search_path change the context
Scriptnames resolve against the console schema
archive.orders · resolved through search_path set on line 1
0 0Tablecloth: resolving in Playground modeacme-dev · acme · publicLn 3, Col 22SQL
90Pin result tabBefore 1.0Results & sessionsexample
Pin a result tab
Pin a result tab and later runs open next to it instead of replacing it.
console [acme.public] — acme
Database
DDL
acme-devPostgreSQL 17.9
acme
public
tables3
views1
shipped_orders
sequences3
object types2
acme-staging
acme-prodread-only
analytics
console [acme.public]
Tx: Auto acme-dev · acme.public
1-- shipped orders
2SELECT o.id, c.email, o.total FROM orders o JOIN customers c ON c.id = o.customer_id WHERE o.status = 'shipped';
105Function signature; Types compatibility; VALUES clause cardinality; Insert NULL into NOT NULL; Insertion into generated columnsBefore 1.0Inspectionsexample
Arity and type checks
The number of values against the column list, the argument count of a function, and the type of a literal against its column are all checked as you type.
console [acme.public] — acme
Database
DDL
acme-devPostgreSQL 17.9
acme
public
tables3
views1
shipped_orders
sequences3
object types2
acme-staging
acme-prodread-only
analytics
console [acme.public]
Tx: Auto acme-dev · acme.public
1INSERTINTO customers (email, name)
2VALUES('grace@example.com');
VALUES has 1 expression but 2 columns are listed (email, name)
Add a value for nameRemove name from the column list
108Rename table/column (Shift+F6) with usage search in loaded sources, text, comments/strings; scope; preview; editable SQL; in-place rename in editorBefore 1.0Refactoring & navigationexample
Rename with usages
Rename a table or column and every usage Tablecloth can see comes with it: dependent views, attached SQL files, open consoles. Preview first, then refactor.
console [acme.public] — acme
Database
DDL
acme-devPostgreSQL 17.9
acme
public
tables3
customers
order_items
orders
idbigint · PK
customer_idbigint · FK → customers
statusorder_status
totalnumeric(10,2)
notetext
idx_orders_status(status)
views1
sequences3
object types2
acme-staging
acme-prodread-only
analytics
console [acme.public]
Tx: Auto acme-dev · acme.public
1SELECT note FROM orders WHERE id = 1042;
Rename Column
public.orders.note
New namememo
Search in comments and stringsUpdate dependent views
Usage
Where
shipped_orders
view definition
reports/monthly.sql
lines 12, 31
console [acme.public]
line 7
Preview
ALTERTABLE public.orders RENAMECOLUMN note TO memo;
The same plan drawn as a tree of nodes, with the expensive one marked, for when the table view is too much to read.
console [acme.public] — acme
Database
DDL
acme-devPostgreSQL 17.9
acme
public
tables3
views1
shipped_orders
sequences3
object types2
acme-staging
acme-prodread-only
analytics
console [acme.public]
Tx: Auto acme-dev · acme.public
1EXPLAIN
2SELECT o.id, c.email, o.total
3FROM orders o
4JOIN customers c ON c.id = o.customer_id
5WHERE o.status = 'shipped';
PROBLEMSOUTPUTTERMINALTABLECLOTH
Database
acme-dev
console
shipped ordersPlan
Explain Analyse
Hash Joincost 61.3 · 812 rows
Seq Scanorders · 48.0 · 812 rows
Hash3.5 · 120 rows
Seq Scancustomers · 2.2 · 120 rows
0 0Tablecloth: plan for 1 statementacme-dev · acme · publicLn 5, Col 28SQL
117Full-text search across selected data sources/schemas/tables (Ctrl+Alt+Shift+F), results in Find window, pin, open objectnextBefore 1.0Full-text searchexample
Full-text search in data
Search a value across every text column of the selected schemas, and open the matching rows as filtered grids.
console [acme.public] — acme
Database
DDL
acme-devPostgreSQL 17.9
acme
public
tables3
views1
sequences3
object types2
acme-staging
acme-prodread-only
analytics
console [acme.public]
Tx: Auto acme-dev · acme.public
1SELECT * FROM customers WHERE name ILIKE'%hopper%';
Full-Text Search
acme-dev
Search forhopper
acme-devpublicarchive
ContainsStarts withMatches (regex)
Match caseText columns only
Table
Column
Rows
customers
name
2
orders
note
1
CloseOpen in Panel
0 0Tablecloth: 3 rows in 2 tables match "hopper"acme-dev · acme · publicLn 1, Col 1SQL
1.0
Usefuloccasional
0 of 75 supported
118"URL only" connection type / direct JDBC URL editingAfter 1.0Connections
129View in Groups options: Databases and Schemas; Server/Database Objects; Object Elements; Schema Objects; by Prefix; Separate Procedures and Functions; Constraints under schema; Sort alphabeticallyAfter 1.0Explorer
130Scroll from EditorAfter 1.0Explorer
131Expand All / Collapse AllAfter 1.0Explorer
132Quick Documentation (Ctrl+Q) on tree objectAfter 1.0Explorer
133Generate DDL to Clipboard (Ctrl+Alt+Shift+G) / to Query Console (Ctrl+Alt+Shift+B)After 1.0Explorer
134Request and Copy Original DDLAfter 1.0Explorer
135Enable/Disable Triggers and ConstraintsAfter 1.0Explorer
136Modify GrantsAfter 1.0Explorer
137Query Files folder per data source in tree; create query file from sourceAfter 1.0Consoles
138SQL resolution scopes: map directories/files to data sources; project-wide mappingAfter 1.0Consoles
139"Database Script" run configuration (saved targets + script files)After 1.0Consoles
140Run a file against multiple data sources at once (Ctrl+Shift+F10)After 1.0Consoles
145Toggle "Open results in new tab" vs reuseAfter 1.0Results & sessions
146In-Editor Results (results rendered under the query, with paging)After 1.0Results & sessions
147Sessions tree: data sources > sessions > clients with connection statusAfter 1.0Results & sessions
148Switch Session for a console/file; Switch Data Source for a client; session modes (single shared / two sessions / dedicated)After 1.0Results & sessions
162Edit CSV/TSV files as tables (Text/Data tabs, format config, sort, hide/move columns, export, import to DB)After 1.0Import & export
163Non-strict FK suggestions by column-name matchingAfter 1.0SQL editing
164Window function completion inserts OVER(); INSERT column/VALUES list completion; new-object completion in ALTER; abbreviation matchingAfter 1.0SQL editing
165Configurable SQL code style (per driver/data source), keyword case, code-generation name templates for FK/indexAfter 1.0SQL editing
166Quick documentation / parameter info in editorAfter 1.0SQL editing
167SQL dialect per global / project / directory / file; Generic SQL to silence syntax errorsAfter 1.0SQL editing
168Each derived table should have alias; Missing column aliases; Duplicating column name in SELECT; Column shadowed by alias; Redundant alias expressionsAfter 1.0Inspections
169Redundant ELSE NULL; redundant COALESCE args; redundant ordering direction; redundant/multiple row limiting; CASE vs COALESCE/IFAfter 1.0Inspections
186Virtual foreign keys (manual, regex rules with debugger, store relation from JOIN)After 1.0Objects & DDL
187ER diagram for data source / schema / selected tables (Ctrl+Alt+Shift+U; popup Ctrl+Alt+U)After 1.0Diagrams
188Explain Plan (Raw) / Explain Analyse (Raw); Copy Original Query PlanAfter 1.0Explain plan
189Compare Structure With (Ctrl+D): Object Properties diff + DDL diff, show identical, swap origin/targetAfter 1.0Compare & migrate
190Migration script: select changes, options (qualify, constraints, recreate), preview, execute, open in consoleAfter 1.0Compare & migrate
191Compare Data (tables/views/result sets) with tolerance, detect column insertion, colour-coded diffAfter 1.0Compare & migrate
192Options: match case; contains / starts / ends / matches / LIKE pattern; text / FTS-indexed / numeric / all columns; first N matches per tableAfter 1.0Full-text search
The tiers are my judgement of how often a feature is felt in a day's work, so the order will move as I use the thing. I build what I actually use, and the seam exists so the small stuff can never hold up 1.0. If there's something in Database Tools you use every week and it's ranked too low, open an issue and say what it's for.