Repository navigation
v0.6.0
Highlights
- PostgreSQL and SQL Server (experimental). Connect with Type: PostgreSQL or Type: SQL Server and get the tools MySQL has: SQL windows, explain plan, completion, the object browser and object views (#36). Each database has a monitoring dashboard (#92) with session details, cancel and kill (#96), and both connect through SSH (#97).
- Appearance settings. Choose the interface font and its size, or a Compact layout with less padding and smaller margins. You can also set an accent color, corners, shadows and scroll bars, plus the result grid's font and the editor's line spacing and cursor (#105).
- MySQL results editable in place. Rows are found by the table's primary or unique key (#101).
- INSERT statements in each database's own SQL from Export and Copy as (#106).
- Oracle over TLS (TCPS) no longer crashes when connecting (#104).
Added
PostgreSQL and SQL Server (experimental)
- Connections with Type: PostgreSQL and Type: SQL Server (#36). Scripts split the database's way: dollar-quoted routine bodies and
::casts on PostgreSQL,GObatches andBEGIN … ENDblocks on SQL Server. - A monitoring dashboard each (Monitor → Dashboard), like MySQL's (#92):
- findings first, KPI tiles and trend charts from the server's counters;
- what runs and waits now, and connections by user, application or program, client and database;
- lock waits and blocking with the blocker's statement (or that it sits idle in a transaction), open transactions, storage, and top statements with Analyze;
- PostgreSQL: from
pg_stat_activity,pg_stat_database,pg_locks, the replication views andpg_stat_statements, with findings for idle transactions, replication lag and inactive slots, transaction ID wraparound and dead rows; - SQL Server: from the DMVs and performance counters, with top waits since the last refresh, log use and page life expectancy;
- without
pg_read_all_statsorVIEW SERVER STATE, the dashboard shows what it can and says what's missing.
- Session details from the dashboard's session ids (#96):
- how the session connected, and the statement it runs or ran last; on SQL Server with its cached plan as an outline and the showplan XML to copy;
- its transaction, its locks with the tables named, and the sessions it waits for and blocks;
- Cancel query and Terminate (PostgreSQL) and Kill (SQL Server) ask first and say what gets rolled back.
- Connect through SSH, as on MySQL. The address is the database as the SSH server sees it (
localhost:5432/database). On PostgreSQL, TLS still checks the database's own host name, and on SQL Server the login stays encrypted. A named SQL Server instance (host\instance) can't be found through a tunnel, so give its port instead (#97). - SQL Server messages:
PRINToutput and informational messages (RAISERRORup to severity 10, "Changed database context to …") show as messages, in order with the batch's results (#98).
Appearance (#105)
Settings → Appearance:
- Interface font: a TrueType/OpenType file and a size for menus, tabs, dialogs and the object browser, separate from the zoom, which still scales everything.
- Density: Comfortable (the look so far) or Compact, or padding, gaps, margins and tree indent set one by one. Rows of the object browser, lists and tables, the toolbar, the status bar and the tabs follow.
- Look: an accent color, square corners, shadows off, scroll bars that are always visible, animations off, and object names in the browser in the interface font.
- Result grid: the code font or the interface font, its own size, striped rows on or off, lines between rows, and what NULL looks like.
- Editor: line spacing, and a line, block or underline cursor that blinks or not.
With the default settings, Pythia looks exactly as before.
MySQL
- Results can be edited in place, as on Oracle (#101):
- MySQL has no ROWID, so the table's primary key (or a unique key on NOT NULL columns) finds a row again. Edit adds its columns, read-only, to the end of the result, also when the query doesn't select them.
- Applying checks the values that were fetched, so a row another session changed is a conflict. FLOAT values, which MySQL shows rounded, and JSON compare as such.
- Text with a backslash is written as hex, so it works with or without
NO_BACKSLASH_ESCAPES. - Tables without such a key stay read-only and say why.
SQL windows
- Edit isn't offered for DISTINCT, GROUP BY or aggregate queries, whose rows aren't the table's.
- Backtick-quoted names are identifiers to the editor and the statement splitter, so a
;inside one doesn't end the statement.
Changed
- Building: a
fastprofile (cargo run --profile fast -p pythia-app) for running an optimized build locally. A change rebuilds in 5–15 s, where the release profile takes about two minutes for link-time optimization. Clean builds no longer compile aws-lc (about 90 s), because TLS runs on ring in all drivers (#99).
Fixed
- Oracle over TLS (TCPS) no longer crashes on connecting. With two crypto providers compiled in, rustls couldn't pick one (#104).
- Read-only connections no longer let results be edited and applied. Before, only statements run from the editor were held back (#107).
- Export → SQL INSERT and Copy as → INSERT wrote Oracle SQL on every connection (#106):
- on MySQL, column names went into double quotes (a syntax error) and dates into
to_date(…), andVARBINARYvalues were stored as text; - on SQL Server,
datetimevalues swapped month and day underDATEFORMAT dmy; - the statements now use each database's quoting and literals: backtick names and
X'…'on MySQL,E'…'for backslashes on PostgreSQL, andN'…',0x…and ISO 8601 dates on SQL Server.
- on MySQL, column names went into double quotes (a syntax error) and dates into
- MySQL: the database picked in the object browser now becomes the connection's database, as 0.5.0 meant to do (#81). SQL windows no longer fail with No database selected (#102).
- The schema after login: a connection reports the schema its login statements leave it in (#103):
- a MySQL profile with a Default schema no longer shows "No database";
- on Oracle and PostgreSQL, the object browser and completion start in the profile's default schema, or the one the login script sets.
- Connect dialog: Connect no longer stays disabled after Connect through SSH was ticked for MySQL and the type changed to one without tunnels (#95).
- Editing another user no longer needs SELECT_CATALOG_ROLE. The form opens with what the session can read, and leaves anything it couldn't read as it is (#89).
- Monitor:
- a view that isn't granted no longer takes down what doesn't depend on it: without
V$SQLthe session list shows sessions without their SQL text, and withoutV$OSSTATthe dashboard keeps its instance header (#90); - AWR plan history lists snapshots in time order in a PDB, and says so when no plan was kept (#93);
- the session list's filter chip shows an × instead of a box (#91).
- a view that isn't granted no longer takes down what doesn't depend on it: without
Downloads
Every package comes in two flavors:
pythia_…/pythia-v0.6.0-<platform>…: the pure-Rust Oracle driver, so no Oracle client is needed. Take this one unless you need the other.pythia-instantclient_…/…-instantclient: uses the Oracle Instant Client, which you install yourself. You need it for Oracle 11.2, servers that require Native Network Encryption, and OS or wallet logins.
Installing one flavor replaces the other; settings and connections stay.
| Platform | Packages |
|---|---|
| Linux x86_64 | .deb, .AppImage, .tar.gz |
| Windows x86_64 | .msi, -setup.exe, .zip |
macOS (Apple Silicon aarch64, Intel x64) |
.dmg, .tar.gz |
SHA256SUMS.txt has the checksums of all files.
Full changelog: CHANGELOG.md · compare v0.5.0...v0.6.0