1
0
Fork 0
Postgres CLI with autocompletion and syntax highlighting
Go to file
François Pietka ab487cdacf
Add editorconfig
2017-07-27 13:12:53 +02:00
.github Trimmed down issue template. 2017-03-19 12:14:38 -07:00
pgcli Change the continuation char to empty string. 2017-07-24 10:32:37 -07:00
screenshots Add an animated gif to the readme. 2015-07-23 16:19:29 -07:00
tests PEP8. 2017-07-25 15:09:39 -07:00
.coveragerc Added coverage support for functional tests. 2017-03-31 16:00:54 -07:00
.editorconfig Add editorconfig 2017-07-27 13:12:53 +02:00
.gitignore Packaging: first cut of working deb and rpm build 2015-04-11 14:42:18 -07:00
.travis.yml Golf pep8radius 2017-06-14 18:12:05 +02:00
AUTHORS Update AUTHORS 2017-07-09 13:49:55 -07:00
DEVELOP.rst Fix link 2017-07-01 19:33:02 +01:00
Dockerfile Dockerize 2017-04-15 23:14:17 +01:00
LICENSE.txt Update license. 2017-06-26 10:45:06 -07:00
MANIFEST.in Update manifest to include license in source distribution 2017-06-03 19:42:31 -04:00
README.rst Add Landscape badge 2017-07-27 07:55:04 +02:00
TODO Move refresh routines outside the loop. 2015-01-31 13:46:32 -08:00
Vagrantfile Update repo references. 2015-04-18 22:54:58 -07:00
changelog.rst Changelog update. 2017-07-24 10:34:54 -07:00
post-install Packaging: first cut of working deb and rpm build 2015-04-11 14:42:18 -07:00
post-remove Packaging: first cut of working deb and rpm build 2015-04-11 14:42:18 -07:00
pylintrc Make pylint happier with metadata.py 2017-03-17 03:33:41 +01:00
release.py Signed tags also need a message. Mhm. 2017-07-15 20:24:39 -07:00
release_procedure.txt Fixed release script and author email, because pypi made some breaking changes. 2017-01-11 18:33:36 -08:00
requirements-dev.txt Ported pep8radius addition from mycli. 2017-04-07 17:00:35 -07:00
sanity_checks.txt Corrected some typos 2015-01-08 20:45:12 +05:30
setup.py Set the license to BSD. 2017-06-26 10:44:13 -07:00
tox.ini Add behave to tox 2017-05-22 20:44:02 +02:00

README.rst

A REPL for Postgres
-------------------

|Build Status| |CodeCov| |PyPI| |Landscape| |Gitter|

This is a postgres client that does auto-completion and syntax highlighting.

Home Page: http://pgcli.com

MySQL Equivalent: http://mycli.net

.. image:: screenshots/pgcli.gif
.. image:: screenshots/image01.png

Quick Start
-----------

If you already know how to install python packages, then you can simply do:

::

    $ pip install -U pgcli

    or

    $ brew install pgcli  # Only on macOS

If you don't know how to install python packages, please check the
`detailed instructions`__.

__ https://github.com/dbcli/pgcli#detailed-installation-instructions

Usage
-----

::

    $ pgcli [database_name]

    or

    $ pgcli postgresql://[user[:password]@][netloc][:port][/dbname]

Examples:

::

    $ pgcli local_database

    $ pgcli postgres://amjith:pa$$w0rd@example.com:5432/app_db

Features
--------

The `pgcli` is written using prompt_toolkit_.

* Auto-completes as you type for SQL keywords as well as tables and
  columns in the database.
* Syntax highlighting using Pygments.
* Smart-completion (enabled by default) will suggest context-sensitive
  completion.

    - ``SELECT * FROM <tab>`` will only show table names.
    - ``SELECT * FROM users WHERE <tab>`` will only show column names.

* Primitive support for ``psql`` back-slash commands.
* Pretty prints tabular data.
  Note: `pgcli` uses the `tabulate`_ package to pretty-print tables. This library does smart formatting 
  of numbers, which can sometimes lead to unexpected output. See `this issue`_ for more details.

.. _prompt_toolkit: https://github.com/jonathanslenders/python-prompt-toolkit
.. _tabulate: https://github.com/dbcli/pgcli/blob/master/pgcli/packages/tabulate.py
.. _this issue: https://github.com/dbcli/pgcli/issues/617

Config
------
A config file is automatically created at ``~/.config/pgcli/config`` at first launch.
See the file itself for a description of all available options.

Contributions:
--------------

If you're interested in contributing to this project, first of all I would like
to extend my heartfelt gratitude. I've written a small doc to describe how to
get this running in a development setup.

https://github.com/dbcli/pgcli/blob/master/DEVELOP.rst

Please feel free to reach out to me if you need help.
My email: amjith.r@gmail.com, Twitter: `@amjithr <http://twitter.com/amjithr>`_

Detailed Installation Instructions:
-----------------------------------

macOS:
======

The easiest way to install pgcli is using Homebrew.

::

    $ brew install pgcli

Done!

Alternatively, you can install ``pgcli`` as a python package using a package
manager called called ``pip``. You will need postgres installed on your system
for this to work.

In depth getting started guide for ``pip`` - https://pip.pypa.io/en/latest/installing.html.

::

    $ which pip

If it is installed then you can do:

::

    $ pip install pgcli

If that fails due to permission issues, you might need to run the command with
sudo permissions.

::

    $ sudo pip install pgcli

If pip is not installed check if easy_install is available on the system.

::

    $ which easy_install

    $ sudo easy_install pgcli

Linux:
======

In depth getting started guide for ``pip`` - https://pip.pypa.io/en/latest/installing.html.

Check if pip is already available in your system.

::

    $ which pip

If it doesn't exist, use your linux package manager to install `pip`. This
might look something like:

::

    $ sudo apt-get install python-pip   # Debian, Ubuntu, Mint etc

    or

    $ sudo yum install python-pip  # RHEL, Centos, Fedora etc

``pgcli`` requires python-dev, libpq-dev and libevent-dev packages. You can
install these via your operating system package manager.


::

    $ sudo apt-get install python-dev libpq-dev libevent-dev

    or

    $ sudo yum install python-devel postgresql-devel

Then you can install pgcli:

::

    $ sudo pip install pgcli


Docker
======

Pgcli can be run from within Docker. This can be useful to try pgcli without
installing it, or any dependencies, system-wide.

To build the image:

::

    $ docker build -t pgcli .

To create a container from the image:

::

    $ docker run --rm -ti pgcli pgcli <ARGS>

To access postgresql databases listening on localhost, make sure to run the
docker in "host net mode". E.g. to access a database called "foo" on the
postgresql server running on localhost:5432 (the standard port):

::

    $ docker run --rm -ti --net host pgcli pgcli -h localhost foo

To connect to a locally running instance over a unix socket, bind the socket to
the docker container:

::

    $ docker run --rm -ti -v /var/run/postgres:/var/run/postgres pgcli pgcli foo

Thanks:
-------

A special thanks to `Jonathan Slenders <https://twitter.com/jonathan_s>`_ for
creating `Python Prompt Toolkit <http://github.com/jonathanslenders/python-prompt-toolkit>`_,
which is quite literally the backbone library, that made this app possible.
Jonathan has also provided valuable feedback and support during the development
of this app.

`Click <http://click.pocoo.org/>`_ is used for command line option parsing
and printing error messages.

Thanks to `psycopg <http://initd.org/psycopg/>`_ for providing a rock solid
interface to Postgres database.

Thanks to all the beta testers and contributors for your time and patience. :)


.. |Build Status| image:: https://api.travis-ci.org/dbcli/pgcli.svg?branch=master
    :target: https://travis-ci.org/dbcli/pgcli

.. |CodeCov| image:: https://codecov.io/gh/dbcli/pgcli/branch/master/graph/badge.svg
   :target: https://codecov.io/gh/dbcli/pgcli
   :alt: Code coverage report

.. |Landscape| image:: https://landscape.io/github/dbcli/pgcli/master/landscape.svg?style=flat
   :target: https://landscape.io/github/dbcli/pgcli/master
   :alt: Code Health

.. |PyPI| image:: https://img.shields.io/pypi/v/pgcli.svg
    :target: https://pypi.python.org/pypi/pgcli/
    :alt: Latest Version

.. |Gitter| image:: https://badges.gitter.im/Join%20Chat.svg
    :target: https://gitter.im/dbcli/pgcli?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
    :alt: Gitter Chat