Dblab
The database client every command line junkie deserves.
Install / Use
/learn @danvergara/DblabREADME
dblab

<p align="center">
<img style="float: right;" src="assets/gopher-dblab.png" alt="dblab logo"/ width=200>
</p>
Interactive client for PostgreSQL, MySQL, SQLite3, Oracle and SQL Server.
<img src="screenshots/dblab-cover.png" />Documentation: <a href="https://dblab.app" target="_blank">https://dblab.app</a>
Table of contents
Overview
dblab is a fast and lightweight interactive terminal based UI application for PostgreSQL, MySQL and SQLite3, written in Go and works on OSX, Linux and Windows machines. Main idea behind using Go for backend development is to utilize ability of the compiler to produce zero-dependency binaries for multiple platforms. dblab was created as an attempt to build very simple and portable application to work with local or remote PostgreSQL/MySQL/SQLite3/Oracle/SQL Server databases.
Features
- Cross-platform support OSX/Linux/Windows 32/64-bit
- Simple installation (distributed as a single binary)
- Zero dependencies.
Installation
~~if you need to work with SQLite3, install the CGO enabled binary using the proper bash script listed below.~~ The above comment is deprecated and CGO is not needed anymore. There will be a single binary capable to deal with all supported clients.
Homebrew
It works with Linux, too.
brew install --cask danvergara/tools/dblab
Or
brew tap danvergara/tools
brew install --cask dblab
Binary Release (Linux/OSX/Windows)
You can manually download a binary release from the release page.
Automated installation/update
Don't forget to always verify what you're piping into bash
Install the binarry using our bash script:
curl https://raw.githubusercontent.com/danvergara/dblab/master/scripts/install_update_linux.sh | bash
Help
dblab is a terminal UI based interactive database client
Usage:
dblab [flags]
dblab [command]
Available Commands:
help Help about any command
version The version of the project
Flags:
--cfg-name string Database config name section
--config Get the connection data from a config file (default locations are: current directory, $HOME/.dblab.yaml or $XDG_CONFIG_HOME/.dblab.yaml)
--keybindings, -k Get the keybindings configuration from the config file (default locations are: current directory, $HOME/.dblab.yaml or $XDG_CONFIG_HOME/.dblab.yaml)
--db string Database name (optional)
--driver string Database driver
--encrypt string [strict|disable|false|true] data sent between client and server is encrypted or not
-h, --help help for dblab
--host string Server host name or IP
--limit uint Size of the result set from the table content query (should be greater than zero, otherwise the app will error out) (default 100)
--pass string Password for user
--port string Server port
--schema string Database schema (postgres and oracle only)
--socket string Path to a Unix socket file
--ssh-host string SSH Server Hostname/IP
--ssh-key string File with private key for SSH authentication
--ssh-key-pass string Supports connections with protected private keys with passphrase
--ssh-pass string SSH Password (Empty string for no password)
--ssh-port string SSH Port
--ssh-user string SSH User
--ssl string SSL mode
--ssl-verify string [enable|disable] or [true|false] enable ssl verify for the server
--sslcert string This parameter specifies the file name of the client SSL certificate, replacing the default ~/.postgresql/postgresql.crt
--sslkey string This parameter specifies the location for the secret key used for the client certificate. It can either specify a file name that will be used instead of the default ~/.postgresql/postgresql.key, or it can specify a key obtained from an external “engine”
--sslpassword string This parameter specifies the password for the secret key specified in sslkey
--sslrootcert string This parameter specifies the name of a file containing SSL certificate authority (CA) certificate(s) The default is ~/.postgresql/root.crt
--timeout string in seconds (default is 0 for no timeout), set to 0 for no timeout. Recommended to set to 0 and use context to manage query and connection timeouts
--trace-file string File name for trace log
--trust-server-certificate string [false|true] server certificate is checked or not
-u, --url string Database connection string
--user string Database user
-v, --version version for dblab
--wallet string Path for auto-login oracle wallet
Use "dblab [command] --help" for more information about a command.
Usage
You can start the app passing no flags or parameters, you'll be asked for connection data instead.

$ dblab --host localhost --user myuser --db users --pass password --ssl disable --port 5432 --driver postgres --limit 50
$ dblab --db path/to/file.sqlite3 --driver sqlite
$ dblab --host localhost --user system --db FREEPDB1 --pass password --port 1521 --driver oracle --limit 50
$ dblab --host localhost --user SA --db msdb --pass '5@klkbN#ABC' --port 1433 --driver sqlserver --limit 50
Connection URL scheme is also supported:
$ dblab --url 'postgres://user:password@host:port/database?sslmode=[mode]'
$ dblab --url 'mysql://user:password@tcp(host:port)/db'
$ dblab --url 'file:test.db?_pragma=foreign_keys(1)&_time_format=sqlite'
$ dblab --url 'oracle://user:password@localhost:1521/db'
$ dblab --url 'sqlserver://SA:myStrong(!)Password@localhost:1433?database=tempdb&encrypt=true&trustservercertificate=false&connection+timeout=30'
if you're using PostgreSQL or Oracle, you have the option to define the schema you want to work with, the default value is public for Postgres, empty for Oracle.
# Postgres
$ dblab --host localhost --user myuser --db users --pass password --schema myschema --ssl disable --port 5432 --driver postgres --limit 50
$ dblab --url postgres://user:password@host:port/database?sslmode=[mode] --schema myschema
# Oracle
$ dblab --host localhost --user user2 --db FREEPDB1 --pass password --port 1521 --driver oracle --limit 50 --schema user1
$ dblab --url 'oracle://user2:password@localhost:1521/FREEPDB1' --schema user1
As a request made in #125, support for MySQL/MariaDB sockets was integrated.
$ dblab --url "mysql://user:password@unix(/path/to/socket/mysql.sock)/dbname?charset=utf8"
$ dblab --socket /path/to/socket/mysql.sock --user user --db dbname --pass password --ssl disable --port 5432 --driver mysql --limit 50
Postgres connection through Unix sockets:
$ dblab --url "postgres://user:password@/dbname?host=/path/to/socket"
$ dblab --socket /path/to/socket --user user --db dbname --pass password --ssl disable --port 5432 --driver postgres --limit 50
Now, it is possible to ensure SSL connections with PostgreSQL databases. SSL related parameters has been added, such as --sslcert, --sslkey, --sslpassword, --sslrootcert. More information on how to use such connection flags can be found here.
dblab --host db-postgresql-nyc3-56456-do-user-foo-0.fake.db.ondigitalocean.com --user myuser --db users --pass password --schema myschema --port 5432 --driver postgres --limit 50 --ssl require --sslrootcert ~/Downloads/foo.crt
SSH Tunnel
Now, it's possible to connect to Postgres or MySQL (more to come later) databases on a server via SSH using password or a ssh key files.
To do so, 6 new flags has been added to the dblab command:
| Flag | Description | |----------------------|-------------------------------------------------------------------| | --ssh-host | SSH Server Hostname/IP | | --ssh-port | SSH Port | | --ssh-user | SSH User | | --ssh-pass | SSH Password (Empty string for no password) | | --ssh-key | File with private key for SSH authentication | | --ssh-key-pass | Passphrase for protected private key files |
