Skip to content

v2.1.1

Latest

Choose a tag to compare

@github-actions github-actions released this 27 Oct 19:42
· 6 commits to main since this release
bb2fc62

fbadmin 2.1.1 works with firebirdsql 1.5.0, which was released after fbadmin 2.1.0. With 2.1.0, new installs that picked up firebirdsql 1.5.0 broke in three places. This release also includes the rest of the 2.1 milestone: long-running jobs can be cancelled, data compare keeps its results, the command line can work through a running fbadmin server, and very large schemas and tablets work better.

Upgrade with pip install -U firebird-admin, use the Docker image or Helm chart, or download a desktop installer below. No settings or data need to change.

Fixes for firebirdsql 1.5.0

These affected the pure-Python driver: pip installs without a Firebird 4+ client library, or with Pure Python (firebirdsql) selected. They didn't affect the desktop app or the Docker image, which use the native driver.

  • Statements with about 19 or more parameters failed with AssertionError, for example Copy data into a wide table. firebirdsql 1.5.0 checks the wrong bytes when a statement's parameter description continues in a second reply. fbadmin corrects the check until the driver does.
  • Cancelling a query in the Query Tool hung the tab's connection. fbadmin's replacement for the driver's packet reader didn't know about 1.5.0's new read-ahead buffer, so the error after the cancel was never read.
  • Wire compression stalled for the connection timeout and then broke the connection. 1.5.0's new fetch loop waits for the socket even when decompressed data is already buffered.
  • INT128 and time zone parameters were sent wrongly again: fbadmin's driver patch for them didn't recognise 1.5.0's changed code. It does now.

All of these workarounds are skipped automatically on drivers that don't need them, so firebirdsql 1.4.x keeps working. The fixes were also contributed upstream (nakagami/pyfirebirdsql#144), and so was faster wire encryption (nakagami/pyfirebirdsql#145). Both are merged for firebirdsql 1.5.1. Database drivers has new benchmark tables with 1.5.0.

Highlights

Cancel long-running jobs

  • A Cancel button in the job log and in Processes stops the job. It works for:
    • backups (to the archive and to a server file);
    • restores streamed from fbadmin;
    • sweeps, validations and test restores;
    • scheduled runs;
    • upgrade trial restores;
    • data compare and applying its script;
    • debugger runs.
  • The server work stops too. fbadmin detaches the job's gbak or gfix attachment, or cancels its running statement.
    • On Firebird 5 and 6, the attachment is found by a per-job process name.
    • On Firebird 3 and 4, which don't pass that name on, fbadmin detaches the attachments of the same user and host that started after the job.
  • Cleanup:
    • Partial backups are removed. Firebird 3 keeps the partial file on the server.
    • A half-restored database is dropped if the restore created it.
    • A cancelled scheduled run is recorded as cancelled and sends no failure alert.
  • Not cancellable: a restore from a file on the server can't be stopped from outside, so it has no Cancel button.

See Maintenance.

Data compare

  • Results are kept across restarts: the summary, sample rows, log and sync script. The last 20 per user are in Recent comparisons, where you can reopen or delete them.
  • Keys are matched like the target's collation: case, accents and trailing spaces, probed on the target server. Keys that differ only by case become one UPDATE instead of a DELETE and an INSERT.
  • Self-referencing tables: rows are inserted parents first and deleted children first.

See Data compare.

Command line through a running fbadmin server

fbadmin --url https://fbadmin.example.com --token-env FBADMIN_TOKEN <command> runs a command through a running fbadmin server with an API token. It uses that server's registered servers, saved passwords and permissions.

  • Commands:
    • servers and check;
    • sql, extract, and diff (including --data);
    • backup: streamed to your machine, to a file on the server, or into the server's archive;
    • restore: an upload or a server file.
  • Databases are named @SERVER/DATABASE.
  • Jobs are followed live, and Ctrl+C cancels the job on the server.
  • Requirements: nothing beyond the Python standard library. --ca-cert accepts a private CA.

See Command-line tool.

Very large schemas

Measured with 20,000 tables:

  • Opening a database: 0.25 s instead of 7.5 s. Folder counts now use COUNT(*) instead of listing every object.
  • Big folders: a folder with more than 400 objects renders only the rows in view. Expanded tables, screen-reader positions, and Home/End still work.
  • Autocompletion: for very large schemas it loads table names first (2.5 s instead of 14 s), then fetches the columns of the tables a query mentions.

Tablets

  • ERD: pan, move tables and pinch-zoom with your fingers. The foreign-key handles have larger touch areas.
  • Query builder:
    • Drag tables by touch, and zoom with a pinch or the zoom buttons.
    • Join columns by tapping, because HTML drag and drop doesn't work with touch.
    • Rows are 40 px high on touch screens.
  • Table designer: the grids scroll sideways instead of squeezing their fields.

Tested with real touch input on an emulated iPad. See Phones and tablets.

Other fixes

  • Server mode, several processes starting at once (workers, replicas on one volume, an old instance still stopping):
    • With FBADMIN_ADMIN_* set, all of them tried to create the first administrator, and all but one crashed with UNIQUE constraint failed: users.username.
    • Two people finishing the setup page at the same moment could create two administrators.
    • The first user is now created atomically, also across processes.

Upgrade notes

  • Nothing to change. Both drivers, all settings and the Helm values work as in 2.1.0.
  • Desktop builds are still not code-signed.

Full Changelog: v2.1.0...v2.1.1