# HG changeset patch # User Radek Brich # Date 1328607635 -3600 # Node ID 5fb4883604d60057099aa58ef1176137f364012c # Parent 7f219da7ab71670608d2ff0f64d2dacbbaa11aeb Add analyzeall tool. Updates, fixes. diff -r 7f219da7ab71 -r 5fb4883604d6 analyzeall.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/analyzeall.py Tue Feb 07 10:40:35 2012 +0100 @@ -0,0 +1,34 @@ +#!/usr/bin/env python3.2 + +from pgtoolkit import pgbrowser, toolbase +from pgtoolkit.highlight import highlight + + +class AnalyzeAllTool(toolbase.SimpleTool): + def __init__(self): + toolbase.SimpleTool.__init__(self, name='analyzeall', desc='Analyze all tables.') + self.parser.add_argument('-s', dest='schema', nargs='*', default=['public'], help='Schema filter') + self.parser.add_argument('--vacuum', action='store_true', help='Call VACUUM ANALYZE') + self.parser.add_argument('--full', action='store_true', help='Call VACUUM FULL ANALYZE') + self.init() + + def main(self): + browser = pgbrowser.PgBrowser(self.pgm.get_conn('target')) + + query = 'ANALYZE %s;' + if self.args.vacuum: + query = 'VACUUM ANALYZE %s;' + if self.args.full: + query = 'VACUUM FULL ANALYZE %s;' + + for schema in self.args.schema: + tables = browser.list_tables(schema=schema) + with self.pgm.cursor('target') as curs: + for table in tables: + print(query % table['name']) + curs.execute(query % table['name'], []) + + +tool = AnalyzeAllTool() +tool.main() + diff -r 7f219da7ab71 -r 5fb4883604d6 longqueries.py --- a/longqueries.py Fri Jan 13 15:49:24 2012 +0100 +++ b/longqueries.py Tue Feb 07 10:40:35 2012 +0100 @@ -1,6 +1,7 @@ #!/usr/bin/env python3.2 from pgtoolkit import pgstats, toolbase +from pgtoolkit.highlight import highlight class LongQueriesTool(toolbase.SimpleTool): @@ -11,9 +12,9 @@ def main(self): stats = pgstats.PgStats(self.pgm.get_conn('target')) - for ln in stats.list_long_queries(): + for ln in stats.list_long_queries('0m'): + print(highlight(1), 'backend PID: ', ln['procpid'], ', query_start: ', ln['query_start'].strftime('%F %T'), highlight(0), sep='') print(ln['query']) - print(' ', 'query_start:', ln['query_start'].strftime('%F %T')) print() diff -r 7f219da7ab71 -r 5fb4883604d6 pgtoolkit/pgdatadiff.py --- a/pgtoolkit/pgdatadiff.py Fri Jan 13 15:49:24 2012 +0100 +++ b/pgtoolkit/pgdatadiff.py Tue Feb 07 10:40:35 2012 +0100 @@ -34,7 +34,8 @@ '+' : BOLD | GREEN, '-' : BOLD | RED, '*' : BOLD | YELLOW, - 'V' : BOLD | WHITE} + 'V' : BOLD | WHITE, + 'K' : BOLD | BLUE} def __init__(self, change, cols1, cols2, id=None): self.change = change @@ -44,7 +45,7 @@ def format(self): out = [] - + out.append(highlight(1, self.COLORS[self.change])) out.extend([self.change, ' ']) @@ -62,20 +63,25 @@ return method[self.change](table) - def _format_changes(self): + def _format_changes(self): if self.cols1 and not self.cols2: return [', '.join([self._format_value_del(*x) for x in self.cols1.items()])] if not self.cols1 and self.cols2: return [', '.join([self._format_value_add(*x) for x in self.cols2.items()])] + out = [] + if self.id: + out.extend([highlight(1, self.COLORS['*']), self.id[0], ': ', highlight(0), self.id[1], ', ']) + items = [] for i in range(len(self.cols1)): items.append(( list(self.cols1.keys())[i], list(self.cols1.values())[i], list(self.cols2.values())[i])) - - return [', '.join([self._format_value_change(*x) for x in items])] + out.extend([', '.join([self._format_value_change(*x) for x in items])]) + + return out def _format_value_del(self, k, v): fs = (highlight(1, self.COLORS['-']) + '{}: ' + highlight(0) + '{}') @@ -191,6 +197,8 @@ def _select(self): browser = pgbrowser.PgBrowser(self.conn1) columns = browser.list_columns(schema=self.schema1, table=self.table1, order=1) + if not columns: + raise Exception('Table %s.%s not found.' % (self.schema1, self.table1)) columns_sel = ', '.join(['"' + x['name'] + '"' for x in columns]) self.colnames = [x['name'] for x in columns]