pydbkit/tools/listtables.py
author Radek Brich <radek.brich@devl.cz>
Wed, 09 Jul 2014 18:04:11 +0200
changeset 105 10551741f61f
parent 104 listtables.py@d8ff52a0390f
permissions -rw-r--r--
Move batchquery, listtables tools under pgtool.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
105
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
     1
from pydbkit.toolbase import SimpleTool
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
     2
from pydbkit import pgbrowser
2
efee419b7a2d Fix pgmanager exceptions.
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
     3
efee419b7a2d Fix pgmanager exceptions.
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
     4
105
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
     5
class ListTablesTool(SimpleTool):
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
     6
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
     7
    """
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
     8
    List tables in database.
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
     9
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
    10
    Allows filtering by combination of conditions.
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
    11
    (Currently only by options.)
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
    12
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
    13
    """
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
    14
2
efee419b7a2d Fix pgmanager exceptions.
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    15
    def __init__(self):
105
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
    16
        SimpleTool.__init__(self, name='listtables')
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
    17
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
    18
    def specify_args(self):
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
    19
        SimpleTool.specify_args(self)
68
b0d972be2631 Add listtables tool.
Radek Brich <radek.brich@devl.cz>
parents: 38
diff changeset
    20
        self.parser.add_argument('-o', dest='options', type=str, nargs='*', help='Filter by options (eg. -o autovacuum_enabled=false).')
2
efee419b7a2d Fix pgmanager exceptions.
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    21
efee419b7a2d Fix pgmanager exceptions.
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    22
    def main(self):
efee419b7a2d Fix pgmanager exceptions.
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    23
        browser = pgbrowser.PgBrowser(self.pgm.get_conn('target'))
efee419b7a2d Fix pgmanager exceptions.
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    24
38
d3593869d624 Update bigtables tool: scan all schemas.
Radek Brich <radek.brich@devl.cz>
parents: 9
diff changeset
    25
        # scan all tables from all shemas, remember names and sizes
68
b0d972be2631 Add listtables tool.
Radek Brich <radek.brich@devl.cz>
parents: 38
diff changeset
    26
        tables = []
b0d972be2631 Add listtables tool.
Radek Brich <radek.brich@devl.cz>
parents: 38
diff changeset
    27
        for schema in browser.schemas.values():
b0d972be2631 Add listtables tool.
Radek Brich <radek.brich@devl.cz>
parents: 38
diff changeset
    28
            for table in schema.tables.values():
b0d972be2631 Add listtables tool.
Radek Brich <radek.brich@devl.cz>
parents: 38
diff changeset
    29
                for option in self.args.options:
b0d972be2631 Add listtables tool.
Radek Brich <radek.brich@devl.cz>
parents: 38
diff changeset
    30
                    if option in table.options:
b0d972be2631 Add listtables tool.
Radek Brich <radek.brich@devl.cz>
parents: 38
diff changeset
    31
                        tables.append(table)
b0d972be2631 Add listtables tool.
Radek Brich <radek.brich@devl.cz>
parents: 38
diff changeset
    32
b0d972be2631 Add listtables tool.
Radek Brich <radek.brich@devl.cz>
parents: 38
diff changeset
    33
        # print result
b0d972be2631 Add listtables tool.
Radek Brich <radek.brich@devl.cz>
parents: 38
diff changeset
    34
        if len(tables):
b0d972be2631 Add listtables tool.
Radek Brich <radek.brich@devl.cz>
parents: 38
diff changeset
    35
            print('Found %d tables:' % len(tables))
b0d972be2631 Add listtables tool.
Radek Brich <radek.brich@devl.cz>
parents: 38
diff changeset
    36
        else:
b0d972be2631 Add listtables tool.
Radek Brich <radek.brich@devl.cz>
parents: 38
diff changeset
    37
            print('No table meets the conditions.')
b0d972be2631 Add listtables tool.
Radek Brich <radek.brich@devl.cz>
parents: 38
diff changeset
    38
        for table in tables:
b0d972be2631 Add listtables tool.
Radek Brich <radek.brich@devl.cz>
parents: 38
diff changeset
    39
            table_name = '%s.%s' % (table.schema.name, table.name)
b0d972be2631 Add listtables tool.
Radek Brich <radek.brich@devl.cz>
parents: 38
diff changeset
    40
            print(' ', table_name)
2
efee419b7a2d Fix pgmanager exceptions.
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    41
efee419b7a2d Fix pgmanager exceptions.
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    42
105
10551741f61f Move batchquery, listtables tools under pgtool.
Radek Brich <radek.brich@devl.cz>
parents: 104
diff changeset
    43
cls = ListTablesTool
2
efee419b7a2d Fix pgmanager exceptions.
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    44