/greptable

mirror of git://git.p.engu.in/laurentb/greptable

Primary LanguagePythonMIT LicenseMIT

=========
greptable
=========


Description
-----------

``greptable`` generates a plain-text list of your servers, databases and tables,
so that you can easily find where the fuck that table is, with your favorite
search tools, like ``grep``.

This is especially useful if you are dealing with many servers and databases.


Requirements
------------

``greptable`` works on both Python 2 and Python 3.

The only dependency is ``SQLAlchemy``, and it should support the same databases.


Usage
-----

For global options run ``greptable -h``.

All commands need a configuration file; see the *Configuration* section below.

Listing tables
~~~~~~~~~~~~~~

To list the tables, run ``greptable dump``.

You can change the configuration file path with the ``-c``
(also known as ``--config``).
By default, it uses ``~/.config/greptable.conf`` if it exists,
otherwise ``greptable.conf`` from the current directory.

The tables are listed to the standard output by default.
The ``-o`` (also known as ``--output``) option can dump in a file instead.

Example: ``greptable -c greptable.conf dump -o tables.txt``

For full help on options run ``greptable dump -h``.

Opening tables
~~~~~~~~~~~~~~

``greptable`` lets you open a table or schema in your favorite admin interface,
built from a configured URL template.

This is thought for phpMyAdmin, but should work with other tools, even
non-web (if not, please provide examples or patches).

Using it is as simple as running ``greptable open`` followed
by the selected output of a ``greptable dump``.
You can even do ``greptable open $(greptable dump|grep mytable)``.

The URL will be opened by ``xdg-open``. If it's not opening the wanted
browser, you should set the ``BROWSER`` environment variable.

If you only want to show the URL, and not open it automatically, use the
``-s`` (also known as ``--show``) option.

Configuration
-------------

The configuration is a standard INI file.
Section headers are `SQLAlchemy URLs <http://docs.sqlalchemy.org/en/latest/core/engines.html>`_.

For example::

    [mysql://user:password@server1]
    [sqlite:///db.sqlite]

``greptable`` will try to prettify server URLs, but you can also force a name.

For example::

    [mysql://user:password@server1]
    [sqlite:///db.sqlite]
    name = db

For the ``open`` subcommand, you can provide both a ``openschema`` and ``opentable``
option. If the ``openschema`` option is not provided, ``opentable`` will be used,
with the table parameter being an empty string.

The variable substitution uses the Python ``format()`` syntax.

For example::

    [mysql://user:password@server1]
    opentable = https://penguincorp.com/pma/index.php?server=0&db={schema}&table={table}

    [mysql://user:password@server2]
    opentable = https://penguincorp.com/pma/index.php?server=1&db={schema}&table={table}

    [otherdb://user:password@server]
    name = srv0
    openschema = https://penguincorp.com/otherdb/{server}/tables/{schema}
    opentable = https://penguincorp.com/otherdb/{server}/showtable/{schema}/{table}


Development
-----------

Contributions can be sent in the form of git patches, to laurent@bachelier.name.