# HG changeset patch # User Radek Brich # Date 1361886039 -3600 # Node ID b0d972be26311f615635bac967af610f36ac08d6 # Parent 78478a49c0bd587d653cd8084147e8da3fc118ba Add listtables tool. diff -r 78478a49c0bd -r b0d972be2631 .hgignore --- a/.hgignore Fri Feb 15 16:38:23 2013 +0100 +++ b/.hgignore Tue Feb 26 14:40:39 2013 +0100 @@ -3,5 +3,7 @@ ^.pydevproject ^.settings/org.eclipse.core.resources.prefs ^pgtoolkit\.conf$ -^build +^build/ +^dist/ +^MANIFEST$ ^tests\.conf$ diff -r 78478a49c0bd -r b0d972be2631 listtables.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/listtables.py Tue Feb 26 14:40:39 2013 +0100 @@ -0,0 +1,35 @@ +#!/usr/bin/env python3.2 + +from pgtoolkit import pgbrowser, toolbase, prettysize + + +class ListTablesTool(toolbase.SimpleTool): + def __init__(self): + toolbase.SimpleTool.__init__(self, name='listtables', desc='List tables in database.') + self.parser.add_argument('-o', dest='options', type=str, nargs='*', help='Filter by options (eg. -o autovacuum_enabled=false).') + self.init() + + def main(self): + browser = pgbrowser.PgBrowser(self.pgm.get_conn('target')) + + # scan all tables from all shemas, remember names and sizes + tables = [] + for schema in browser.schemas.values(): + for table in schema.tables.values(): + for option in self.args.options: + if option in table.options: + tables.append(table) + + # print result + if len(tables): + print('Found %d tables:' % len(tables)) + else: + print('No table meets the conditions.') + for table in tables: + table_name = '%s.%s' % (table.schema.name, table.name) + print(' ', table_name) + + +tool = ListTablesTool() +tool.main() + diff -r 78478a49c0bd -r b0d972be2631 pgtoolkit/pgbrowser.py --- a/pgtoolkit/pgbrowser.py Fri Feb 15 16:38:23 2013 +0100 +++ b/pgtoolkit/pgbrowser.py Tue Feb 26 14:40:39 2013 +0100 @@ -66,7 +66,7 @@ class Table: - def __init__(self, browser, schema, name, owner, size, description): + def __init__(self, browser, schema, name, owner, size, description, options): self._columns = None self._constraints = None self._indexes = None @@ -76,6 +76,7 @@ self.owner = owner self.size = size self.description = description + self.options = options or [] def refresh(self): self.refresh_columns() @@ -269,7 +270,8 @@ c.relname as "name", pg_catalog.pg_get_userbyid(c.relowner) as "owner", pg_catalog.pg_relation_size(c.oid) as "size", - pg_catalog.obj_description(c.oid, 'pg_class') as "description" + pg_catalog.obj_description(c.oid, 'pg_class') as "description", + c.reloptions as "options" FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = %s AND c.relkind IN ('r','s','')