Keyboard Shortcuts & Multi-Database Support
Full shortcut reference, plus how the workbench holds many engines open at once and where the engines differ.
Keyboard Shortcuts
| Category | Action | Windows / Linux | macOS |
|---|---|---|---|
| Execution | Execute Query | Ctrl+Enter or F5 | Cmd+Enter or F5 |
| Execution | Execute Selected Text | Ctrl+Shift+Enter | Cmd+Shift+Enter |
| File | Save Query | Ctrl+S | Cmd+S |
| Search | Find | Ctrl+F | Cmd+F |
| Search | Find and Replace | Ctrl+H | Cmd+H |
| Formatting | Format SQL | Ctrl+Shift+F | Cmd+Shift+F |
| Editing | Toggle Line Comment | Ctrl+/ | Cmd+/ |
| Editing | Toggle Block Comment | Shift+Alt+A | Shift+Option+A |
| Editing | Undo | Ctrl+Z | Cmd+Z |
| Editing | Redo | Ctrl+Y or Ctrl+Shift+Z | Cmd+Shift+Z |
| Editing | Duplicate Line | Shift+Alt+Down | Shift+Option+Down |
| Editing | Move Line Up / Down | Alt+Up / Alt+Down | Option+Up / Option+Down |
| Selection | Select All | Ctrl+A | Cmd+A |
| Selection | Select Line | Ctrl+L | Cmd+L |
Saved connections and query tabs can be reached with Tab and opened with Enter, and every field of the connection form is named by its label for screen readers.
Several Engines at Once
Any number of connections can be connected at once, each with its own server-side pool, and all of them appear in the navigator, so a PostgreSQL replica, a MySQL staging instance and a Redis cache can be browsed side by side. The editor runs against one connection at a time, the one selected in the header; selecting another switches every tab to it without disconnecting the first. Pools open on first use (a connect, a query or a schema load) and close when the connection is disconnected or idle. There is no cross-connection JOIN: each statement runs against exactly one connection, so compare engines by running the statement against each and comparing the grids or the exported results.
Per-Engine Differences
| Capability | PostgreSQL | MySQL/MariaDB | SQL Server | Oracle | MongoDB | SQLite | Redis |
|---|---|---|---|---|---|---|---|
| Navigator | Full | Full | Full | Full | Collections + sampled fields | Full | Key namespaces |
| Object search | Yes | Yes | Yes | Yes | Yes | Yes | No |
| Write preview | Rolled-back run | Rolled-back run | Rolled-back run | Rolled-back run | Matched documents | Rolled-back run | Keys written |
| Script definition | Yes | Yes | Yes | Yes | No | Yes | No |
| Explain (plan tree) | Yes, with Analyze | Yes, with Analyze | Yes | Yes | Yes | Yes | No |
| Several statements per run | Yes | Yes | Yes | No | No | No | No |
| CSV / TSV / JSON export | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Insert script export | INSERT | INSERT | INSERT | INSERT | insertOne | INSERT | HSET |
| Script rows from the navigator | Yes | Yes | Yes | Yes | Yes | Yes | No |
Dialect Divergence
The IDE runs your SQL as written and does not translate it between engines. The differences that most often bite when moving a statement between the engines above:
| Operation | PostgreSQL | MySQL | SQL Server |
|---|---|---|---|
| Row limiting | LIMIT n | LIMIT n | TOP n / OFFSET FETCH |
| Concatenation | || | CONCAT() | + |
| Case-insensitive match | ILIKE | collation-dependent LIKE | collation-dependent LIKE |
| Upsert | ON CONFLICT DO UPDATE | ON DUPLICATE KEY UPDATE | MERGE |
| Identity | GENERATED ... AS IDENTITY | AUTO_INCREMENT | IDENTITY(1,1) |
| Boolean storage | BOOLEAN | TINYINT(1) | BIT |
The connection selected in the header decides which engine runs the statement, so check it before running SQL written for another engine.