fbsql is a simple command-line client for the Firebird database, inspired by PostgreSQL's psql
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


fbsql - a command-line client for Firebird

fbsql is a simple command-line client for the Firebird database, inspired by PostgreSQL's psql. It is very much a proof-of-concept serving primarily as a testbed for libfq (itself an experimental partial port of PostgreSQL's libpq created to facilitate the development of firebird_fdw).

fbsql provides some advantages over Firebird's native client isql, including:

  • libreadline-based tab completion for both SQL and database objects
  • some useful meta commands ("slash commands")
  • autocommit mode (default: on)
  • indicates transaction status in the prompt

Note that by default, fbsql assumes a UTF-8 environment. An alternative encoding can be provided with the -C/--client-encoding command line option, however it is not possible to switch encoding during a session.

fbsql is far from complete. USE AT YOUR OWN RISK.


RPM packages for CentOS 6/7 are available via the Fedora "copr" build system; for details see here: https://copr.fedorainfracloud.org/coprs/ibarwick/libfq/

fbsql requires the Firebird C API wrapper libfq; RPM packages are also available (see the libfq GitHub page for details.

If installing from source, as well as fbsql, the Firebird client library and header files are required. Dev packages for libreadline must also be present.

Build with the usual:

make install

You may need to specify the location of ibase.h in CFLAGS.


$ fbsql --help
fbsql is an interactive terminal for Firebird.


General options:
  -V, --version            output version information, then exit
  -?, --help               show this help, then exit

Connection options:
  -d, --dbname=DBNAME      database to connect to
  -u, --username=USERNAME  database user name
  -p, --password           password
  -C, --client-encoding    client encoding (default: UTF-8)

Display options:
  -E, --echo-internal      display queries generated by internal commands


fbsql -d localhost:employee.fdb -u sysdba -p masterke

The environment variables ISC_DATABASE, ISC_USER and ISC_PASSWORD are also recognized.

After connecting to Firebird, queries can be executed. Enter help for some very basic help, or \? for details on available slash commands:

fbsql 0.2.0
Connected to Firebird v2.5.7 (libfq version 0.2.0)
SQL> \?
  \copyright             Show fbsql copyright information
  \g or ;                execute query
  \q                     quit fbsql

  \a                     Toggle aligned mode (currently on)
  \format OPTION [VALUE] Set or show table output formatting option:
  \plan [SETTING]        Display plan {off|on|only} (currently off)
  \timing                Toggle excution timing (currently on)

  \activity              Show information about current database activity
  \conninfo              Show information about the current connection

  (options: S = show system objects, + = additional detail)
  \l                     List information about the current database
  \autocommit            Toggle autocommit (currently on)
  \d      NAME           List information about the specified object
  \df     [PATTERN]      List information about functions matching [PATTERN]
  \di[S+] [PATTERN]      List information about indexes matching [PATTERN]
  \dp     [PATTERN]      List information about procedures matching [PATTERN]
  \ds[S]  [PATTERN]      List information about sequences (generators) matching [PATTERN]
  \dt[S]  [PATTERN]      List information about tables matching [PATTERN]
  \du                    List users granted privileges on this database
  \dv     [PATTERN]      List information about views matching [PATTERN]
  \util   [COMMAND]      execute utility command

List all tables:

SQL> \dt
              List of tables
 Name             | Owner  | Description
 country          | sysdba |
 customer         | sysdba |
 department       | sysdba |
 employee         | sysdba |
 employee_project | sysdba |
 job              | sysdba |
 proj_dept_budget | sysdba |
 project          | sysdba |
 salary_history   | sysdba |
 sales            | sysdba |

Get detailed information about a table:

SQL> \d job
                                 Table "job"
 Column          | Field type    | Modifiers | Default value | Description
 job_code        | VARCHAR(5)    | NOT NULL  |               |
 job_grade       | SMALLINT      | NOT NULL  |               |
 job_country     | VARCHAR(15)   | NOT NULL  |               |
 job_title       | VARCHAR(25)   | NOT NULL  |               |
 min_salary      | NUMERIC(10,2) | NOT NULL  |               |
 max_salary      | NUMERIC(10,2) | NOT NULL  |               |
 job_requirement | BLOB          |           |               |
 language_req    | VARCHAR(15)   |           |               |

  rdb$primary2 PRIMARY KEY (job_code, job_grade, job_country)
  minsalx (job_country, min_salary)
  maxsalx (job_country, max_salary)
Foreign keys:
  rdb$foreign3 FOREIGN KEY (job_country) REFERENCES country (country) ON UPDATE RESTRICT ON DELETE RESTRICT


Many, in particular:

  • command terminator is limited to a semicolon; it is currently not possible to create functions/procedures with fbsql
  • no BLOB/ARRAY support (due to missing support in libfq)
  • does not properly align column data containing non-ASCII characters
  • no configuration file support