This page describes Calíope 1.5, the version I am building right now. 1.4 is on the App Store for the Mac, iPad, iPhone, Apple Watch, Apple TV and Apple Vision Pro. The changelog says which version each feature landed in.

Adds an “Open in Calíope” button to every topic. It only works with the app installed.

Catalogs

Browse Catalogs

Navigate tables, views, indexes, columns, routines, triggers, and events.

Where it is: Workspace › Tools › Catalogs

Open Catalogs from the workspace navigation bar. Select a database in the top selector. The sub-tabs display the different categories of objects.

Keywords: catalogs, objects, tables, views, indexes, routines

View and Edit Object DDL

Display the CREATE TABLE, CREATE VIEW, or CREATE PROCEDURE and edit it interactively.

Where it is: Catalogs › right-click › View DDL

Right-click on any object in the catalogs list and select View DDL. The bottom panel shows the full DDL with syntax highlighting and text selection on all three.

Editing the DDL:
Press Open in ItemEditor (button at the top of the DDL panel) to open the editor in a modal sheet with the DDL pre-loaded:

- macOS: SQLTextEditor with syntax highlighting and full text manipulation.
- iPad: TextEditor with monospaced font and touch keyboard.

Modify the DDL as needed and press Apply to send it to the server. The Reset button discards your changes and reverts to the original DDL. If the ALTER or CREATE fails, a red message appears in the bottom bar with the server's error.

Available on macOS, iPad and iPhone.

Keywords: DDL, CREATE TABLE, ALTER, definition, structure, schema, edit, ItemEditor, Apply

Create New Table

Create a table directly from the Catalogs toolbar.

Where it is: Catalogs › New table

In the Catalogs toolbar, use the New table button to open the Table Builder in a new tab. You can also open the context menu on an existing table — right-click on macOS, press and hold on iPad — and choose Design table to edit it.

The builder is divided into four sections accessible from its tab bar:

- Columns — define the name, data type, and constraints for each column. Select a row in the list to edit its properties in the panel below (Identification, Constraints, Default value, Character set).
- Indexes — manage PRIMARY, UNIQUE, INDEX, and FULLTEXT indexes.
- Foreign keys — configure relationships between tables with ON DELETE/ON UPDATE actions.
- Options — adjust the engine (ENGINE), character set, and table comment.

The SQL Preview section at the bottom shows the DDL that will be executed in real time. Click Create table (or Apply changes in edit mode) to send the DDL to the server.

Keywords: new table, create table, create, DDL, builder, columns, indexes, foreign keys

Create Views, Indexes, Routines, Triggers, and Events

Access the visual editors for each object type from the toolbar.

Where it is: Catalogs › New view / New index / New routine / New trigger / New event

The Catalogs toolbar includes dedicated buttons to create each object type:

- New view — opens the view editor
- New index — opens the index editor
- New routine — opens the function and stored procedure editor
- New trigger — opens the trigger editor

MySQLMariaDBAurora

- New event — in the Events tab, opens the event scheduler editor

SQL ServerPostgreSQL

There is no Events tab and no New event: the server has no event scheduler.

Each editor generates the corresponding DDL (CREATE VIEW, CREATE INDEX, CREATE PROCEDURE, etc.) in the dialect of the server you are connected to, and executes it on the server upon confirmation. Each one only offers what that server can write: the next topics say what changes from one engine to another.

Keywords: view, index, routine, trigger, event, create, DDL, stored procedure

Edit Views, Routines, Triggers, and Events

Modify existing objects with the visual editor or directly in the SQL editor.

Where it is: Catalogs › right-click › Edit (visual form) / Open in ItemEditor

Open the context menu on a view, routine, trigger, or event in its corresponding Catalogs tab — right-click on macOS, press and hold on iPad. Besides View DDL, it offers two ways to edit:

- Edit (visual form) — opens the graphical editor with pre-filled fields
- Open in ItemEditor — opens the full DDL of the object in the SQL editor for manual modification

Changes made in the visual form generate an ALTER or DROP + CREATE depending on the object type.

Keywords: edit view, edit routine, edit trigger, edit event, form, ItemEditor

Populate Table with Dummy Data

Automatically generate test rows for a table.

Where it is: Catalogs › right-click › Populate with dummy data

Open the context menu on a table in the Tables tab of Catalogs — right-click on macOS, press and hold on iPad — and select Populate with dummy data. Calíope will generate sample INSERT statements adapted to the table's column types.

Keywords: dummy data, seed, test data, populate, fake data

Read-Only Mode

Prevents accidental modifications to catalog objects.

Where it is: Catalogs › Read only

Enable the Read-only toggle in the Catalogs toolbar to disable all create and delete buttons. Useful when exploring a production database.

Keywords: read only, read-only, protect, production

View Editor

Create or modify a view; the options it offers depend on the engine.

Where it is: Catalogs › New view / Edit view

The View Editor opens when you press New view, or from the context menu of an existing view — right-click on macOS, press and hold on iPad — with Edit (visual form). It automatically generates the CREATE VIEW DDL.

Available fields:

- Name — name of the view in the selected database.
- The replace toggle — when enabled, the generated DDL replaces the view if it already exists, without dropping it first. The toggle is named after the clause it writes:

MySQLMariaDBAuroraPostgreSQL

OR REPLACE — CREATE OR REPLACE VIEW.

SQL Server

OR ALTER — CREATE OR ALTER VIEW.

MySQLMariaDBAurora

- Algorithm — controls how the server processes the view:
- UNDEFINED (default) — the server chooses the optimal algorithm.
- MERGE — merges the view query with the outer query. More efficient.
- TEMPTABLE — materializes the view into a temporary table before applying external filters.
- SQL Security — defines the privileges under which the view executes:
- DEFINER (default) — executes with the privileges of the user who created it.
- INVOKER — executes with the privileges of the user querying it.

- CHECK OPTION — validates that rows modified through the view remain visible in it:
- LOCAL — only checks the condition of this view.
- CASCADED — also checks conditions of underlying views.
- SQL SELECT — the text editor with the SELECT query that defines the view's content.

Press Apply to execute the DDL on the server.

SQL ServerPostgreSQL

There is no Algorithm or SQL Security: the sheet doesn't show them.

SQL Server

WITH CHECK OPTION has a single form, the one CASCADED describes: choosing LOCAL writes that one, and the sheet says so.

Keywords: view, CREATE VIEW, OR REPLACE, algorithm, MERGE, TEMPTABLE, SQL SECURITY, DEFINER, INVOKER, CHECK OPTION, view editor

Routine and Function Editor

Create or modify stored procedures and functions with a visual interface.

Where it is: Catalogs › New routine / Edit routine

The Routine Editor opens when you press New routine or edit an existing routine from the Routines tab of Catalogs. It generates the DDL that creates the procedure or function, or replaces the one with that name:

MySQLMariaDBAurora

Two statements, run one after the other: DROP PROCEDURE IF EXISTS and CREATE PROCEDURE (or DROP FUNCTION IF EXISTS and CREATE FUNCTION). MySQL has no CREATE OR REPLACE for routines, so the existing routine is dropped first: if the creation fails, it is no longer there.

PostgreSQL

CREATE OR REPLACE PROCEDURE or CREATE OR REPLACE FUNCTION.

SQL Server

CREATE OR ALTER PROCEDURE or CREATE OR ALTER FUNCTION.

Available fields:

- Name — name of the procedure or function.
- Type — select between PROCEDURE (procedure) or FUNCTION (function).
- Parameters — add parameters with the + button. Each parameter has:
- Mode: IN (input), OUT (output), INOUT (input and output). Only available for procedures.
- Name of the parameter.
- Data type (e.g. INT, VARCHAR(100), DATETIME).
- Return type (functions only) — the data type returned by the function (e.g. INT, VARCHAR(255)).
- Body — text editor with the code of the routine. It starts as an empty BEGIN … END block to write inside.

The Options section only shows what the server can write:

MySQLMariaDBAurora

- Deterministic — writes DETERMINISTIC if the routine always returns the same result for the same input parameters. Important for replication.
- Data access — declares the routine's behavior regarding the database:
- CONTAINS SQL — may contain SQL but does not read or write data.
- NO SQL — contains no SQL statements.
- READS SQL DATA — reads data but does not modify it.
- MODIFIES SQL DATA — may insert, update, or delete data.

PostgreSQL

Only Deterministic, and only for functions: it writes IMMUTABLE —the function always returns the same result for the same arguments and doesn't read the database—. A procedure has no such option, and there is no Data access: PostgreSQL has no such clause. The body is written in PL/pgSQL (LANGUAGE plpgsql).

SQL Server

There is no Options section: SQL Server works out by itself whether a function is deterministic, and has no data access clause. A parameter that is not IN is written @name type OUTPUT, and the @ is added if you leave it out.

Press Apply to execute the DDL on the server.

Keywords: routine, procedure, function, PROCEDURE, FUNCTION, parameters, IN, OUT, INOUT, deterministic, CONTAINS SQL, CREATE PROCEDURE, CREATE FUNCTION

Trigger Editor

Create or modify the triggers of a table.

Where it is: Catalogs › New trigger / Edit trigger

The Trigger Editor opens when you press New trigger in the Catalogs toolbar, or from the context menu of an existing trigger — right-click on macOS, press and hold on iPad — with Edit (visual form). The schema tree does not open it: its context menu only offers SELECT * FROM, Import data… and Build WHERE….

Available fields:

- Name — name of the trigger.
- Timing — when the trigger fires relative to the operation:

MySQLMariaDBAuroraPostgreSQL

- BEFORE — executes before the operation. Allows modifying NEW values before they are written.
- AFTER — executes after the operation.

SQL Server

- AFTER — executes after the operation.
- INSTEAD OF — replaces the operation with the trigger's code.
There is no BEFORE.

- Event — the operation that fires the trigger:
- INSERT — when a row is inserted.
- UPDATE — when a row is updated.
- DELETE — when a row is deleted.
- Body — text editor with the trigger code. The starter body says, in comments, where the new and previous rows are.

Press Apply to execute the DDL on the server.

MySQLMariaDBAuroraPostgreSQL

The trigger fires once per row: NEW.column is the new value (in INSERT and UPDATE) and OLD.column the previous one (in UPDATE and DELETE).

PostgreSQL

A trigger's code lives in a function: Calíope creates the function <name>_fn with the body and the trigger that calls it, FOR EACH ROW. The body ends with RETURN: in a BEFORE trigger the row it returns is the one written, and NULL skips the row. The starter body returns COALESCE(NEW, OLD), which is right for the three events.

SQL Server

The trigger fires once per statement, not once per row, and the new and previous rows are in the inserted and deleted tables, not in NEW and OLD: the starter body says so.

Keywords: trigger, BEFORE, AFTER, INSERT, UPDATE, DELETE, NEW, OLD, CREATE TRIGGER, trigger editor

Event Scheduler Editor

Create or modify MySQL Event Scheduler events.

Where it is: Catalogs › New event / Edit event

The Event Editor opens when you press New event in the Catalogs toolbar or edit an existing event. Requires the MySQL Event Scheduler to be enabled (SET GLOBAL event_scheduler = ON).

Available fields:

- Name — name of the event.
- Status — controls whether the event is active:
- ENABLE — the event executes according to its schedule.
- DISABLE — the event is paused.
- SLAVESIDE_DISABLED — disabled on a replication replica.
- Schedule type:
- One-time (AT) — executes at a specific date and time. Use the date/time picker to set the moment.
- Recurring (EVERY) — repeats every N time units. Configure the number and unit (SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR).
- Start date (recurring) — when the recurring event begins executing.
- End date (recurring, optional) — enable the toggle to define when it stops executing.
- Body — SQL code executed by the event. Can be a BEGIN … END block with multiple statements.

Press Apply to execute the DDL on the server.

Keywords: event, event scheduler, CREATE EVENT, ENABLE, DISABLE, AT, EVERY, recurring, scheduler, cron, schedule

Index Editor

Create an index on a table with configurable type, method, and columns.

Where it is: Catalogs › New index / Create index

The Index Editor opens from the Indexes tab of Catalogs: with a table selected, the New index button in the toolbar; on an index that already exists, the context menu — right-click on macOS, press and hold on iPad — with Edit (visual form). The schema tree does not open it.

Available fields:

- Name — name of the index on the table.
- Type:
- INDEX — standard index, allows duplicates.
- UNIQUE — unique index, rejects duplicate values in the indexed column or column combination.

MySQLMariaDBAurora

- FULLTEXT — full-text search. Only for CHAR, VARCHAR, or TEXT columns and the MyISAM/InnoDB engine (MySQL 5.6+).
- SPATIAL — geospatial data. Only for spatial-type columns and the MyISAM engine.

MySQLMariaDBAuroraPostgreSQL

- Method (for INDEX and UNIQUE):
- BTREE — B-tree, the most common method. Supports range comparisons, LIKE 'abc%', ORDER BY.
- HASH — hash table, only supports exact equality comparisons.

MySQLMariaDBAurora

HASH is only honoured by the MEMORY engine.

PostgreSQL

A UNIQUE index can't be HASH, so with UNIQUE the method is BTREE. Other methods (gin, gist, brin) are not offered.

SQL Server

There is no Method: CREATE INDEX has no USING clause.

- Columns — add the columns that make up the index with the name field and, optionally, the prefix length (number of characters to index; useful for long TEXT or VARCHAR columns).

SQL ServerPostgreSQL

There is no index prefix: the whole column is indexed, and the generated DDL says so in a comment.

The primary key is managed from the Columns tab of the Table Builder, not from this editor.

Press Apply to execute CREATE INDEX on the server.

Keywords: index, CREATE INDEX, UNIQUE, FULLTEXT, SPATIAL, BTREE, HASH, columns, prefix, ALTER TABLE, index editor