bigtables.py
author Radek Brich <brich.radek@ifortuna.cz>
Thu, 08 Aug 2013 15:26:24 +0200
changeset 85 11a282e23e0d
parent 83 515fadd3d286
child 93 b72591087495
permissions -rwxr-xr-x
Add basic support for types in browser and schema diff.

#!/usr/bin/env python3.2

from pgtoolkit import pgbrowser, toolbase
from pycolib import prettysize


class BigTablesTool(toolbase.SimpleTool):
    def __init__(self):
        toolbase.SimpleTool.__init__(self, name='bigtables', desc='List largest tables.')
        self.init()

    def main(self):
        browser = pgbrowser.PgBrowser(self.pgm.get_conn('target'))

        # scan all tables from all shemas, remember names and sizes
        all_tables = []
        schemas = browser.list_schemas()
        for schema in schemas:
            tables = browser.list_tables(schema['name'])
            for table in tables:
                table_name = '%s.%s' % (schema['name'], table['name'])
                all_tables.append({'name': table_name, 'size': table['size']})

        # print names and sizes of 20 largest tables
        for table in sorted(all_tables, reverse=True, key=lambda x: x['size'])[:20]:
            print(prettysize.prettysize_short(table['size']).rjust(8), table['name'], sep='  ')


tool = BigTablesTool()
tool.main()