Skip to content

danvergara/dblab

Repository files navigation

dblab integration tests unit tests Release

dblab logo

Interactive client for PostgreSQL, MySQL and SQLite3.


Documentation: https://dblab.danvergara.com


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 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 danvergara/tools/dblab

Or

$ brew tap danvergara/tools
$ brew install 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 for Postgres, MySQL and SQLite3.

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 is $HOME/.dblab.yaml or the current directory)
      --db string       Database name
      --driver string   Database driver
  -h, --help            help for dblab
      --host string     Server host name or IP
      --limit int       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 only)
      --socket string     Path to a Unix socket file
      --ssl string      SSL mode
  -u, --url string      Database connection string
      --user string     Database user

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. Alt Text

$ 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

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?cache=shared&mode=memory

if you're using PostgreSQL, you have the option to define the schema you want to work with, the default value is public.

$ 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

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

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

Configuration

Enter previous flags every time is tedious, so dblab provides a couple of flags to help with it: --config and --cfg-name.

dblab is going to look for a file called .dblab.yaml. For now, the only two places where you can drop a config file are $HOME ($HOME/.dblab.yaml) and the current directory where you run the command line tool. If you want to use this feature, --config is mandatory and --cfg-name may be omitted. The config file can store one or multiple database connection sections under the database field. database is an array, previously was an object only able to store a single connection section at a time. We strongly encourgae you to adopt the new format as of v0.18.0. --cfg-name takes the name of the desired database section to connect with. It can be omitted and its default values will be the first item on the array. As of v0.21.0, ssl connections options are supported in the config file.

# default: test
$ dbladb --config

$ dblab --config --cfg-name "prod"

.dblab.yaml example:

database:
  - name: "test"
    host: "localhost"
    port: 5432
    db: "users"
    password: "password"
    user: "postgres"
    driver: "postgres"
    # optional
    # postgres only
    # default value: public
    schema: "myschema"
  - name: "prod"
    # example endpoint
    host: "mydb.123456789012.us-east-1.rds.amazonaws.com"
    port: 5432
    db: "users"
    password: "password"
    user: "postgres"
    schema: "public"
    driver: "postgres"
    ssl: "require"
    sslrootcert: "~/.postgresql/root.crt."
# should be greater than 0, otherwise the app will error out
limit: 50

Or for sqlite:

database:
  - name: "prod"
    db: "path/to/file.sqlite3"
    driver: "sqlite"

Only the host and ssl fields are optionals. 127.0.0.1 and disable, respectively.

Navigation

If the query panel is active, type the desired query and press Ctrl+Space to see the results on the rows panel below. Otherwise, you might me located at the tables panel, then you can navigate by using the arrows Up and Down (or the keys k and j respectively). If you want to see the rows of a table, press Enter. To see the the schema of a table, locate yourself on the rows panel and press Ctrl+S to switch to the structure panel, then switch Ctrl+S to switch back. The same can be achieved for the constraints view by pressing Ctrl+F to go back and forth between the rows and the constraints panels.

Now, there's a menu to navigate between hidden views by just clicking on the desired options:

As you may have noticed, navigation has already been added, so every time you query the content of a listed table, the result set is going to be paginated. This allows to the user dealing with large tables, optimizing resources. Just hit the BACK and NEXT buttons to go back and forth.

Key Bindings

Key Description
Ctrl+Space If the query panel is active, execute the query
Enter If the tables panel is active, list all the rows as a result set on the rows panel and display the structure of the table on the structure panel
Ctrl+S If the rows panel is active, switch to the schema panel. The opposite is true
Ctrl+F If the rows panel is active, switch to the constraints view. The opposite is true
Ctrl+I If the rows panel is active, switch to the indexes view. The opposite is true
Ctrl+H Toggle to the panel on the left
Ctrl+J Toggle to the panel below
Ctrl+K Toggle to the panel above
Ctrl+L Toggle to the panel on the right
Arrow Up Next row of the result set on the panel. Views: rows, table, constraints, structure and indexes
k Next row of the result set on the panel. Views: rows, table, constraints, structure and indexes
Arrow Down Previous row of the result set on the panel. Views: rows, table, constraints, structure and indexes
j Previous row of the result set on the panel. Views: rows, table, constraints, structure and indexes
Arrow Right Horizontal scrolling on the panel. Views: rows, constraints, structure and indexes
l Horizontal scrolling on the panel. Views: rows, constraints, structure and indexes
Arrow Left Horizontal scrolling on the panel. Views: rows, constraints, structure and indexes
h Horizontal scrolling on the panel. Views: rows, constraints, structure and indexes
0 Move cursor to the start of the current line. Views: rows, constraints, and structure
$ Move cursor to the end of the current line. Views: rows, constraints, and structure
g Move cursor to the top of the panel's dataset. Views: rows, constraints, and structure
G Move cursor to the bottom of the panel's dataset. Views: rows, constraints, and structure
Ctrl+c Quit

Contribute

  • Fork this repository
  • Create a new feature branch for a new functionality or bugfix
  • Commit your changes
  • Execute test suite
  • Push your code and open a new pull request
  • Use issues for any questions
  • Check wiki for extra documentation

License

The MIT License (MIT). See LICENSE file for more details.