diff -r d6088dba8fea -r 2a2d0d5df03b pgtoolkit/tools/schemadiff.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pgtoolkit/tools/schemadiff.py Tue May 06 18:37:43 2014 +0200 @@ -0,0 +1,51 @@ +from pgtoolkit.toolbase import SrcDstTool +from pgtoolkit import pgmanager, pgbrowser, pgdiff, toolbase + + +class SchemaDiffTool(SrcDstTool): + + """ + Print differences in database schema. + + Prints changes from source to destination. + SQL patch updates source database schema to destination schema. + + """ + + def __init__(self): + SrcDstTool.__init__(self, name='schemadiff', allow_reverse=True) + + def specify_args(self): + SrcDstTool.specify_args(self) + self.parser.add_argument('-s', dest='schema', nargs='*', help='Schema filter') + self.parser.add_argument('-t', dest='table', nargs='*', help='Table filter') + self.parser.add_argument('-f', dest='function', type=str, help='Function filter (regex)') + self.parser.add_argument('--sql', action='store_true', help='Output is SQL script.') + self.parser.add_argument('--body', action='store_true', help='Output diff for function bodies.') + + def main(self): + srcbrowser = pgbrowser.PgBrowser(self.pgm.get_conn('src')) + dstbrowser = pgbrowser.PgBrowser(self.pgm.get_conn('dst')) + + pgd = pgdiff.PgDiff(srcbrowser, dstbrowser) + + try: + if self.args.schema: + pgd.filter_schemas(include=self.args.schema) + if self.args.table: + pgd.filter_tables(include=self.args.table) + if self.args.function: + pgd.filter_functions(self.args.function) + if self.args.body: + pgd.function_body_diff = True + + if self.args.sql: + pgd.print_patch() + else: + pgd.print_diff() + except pgdiff.PgDiffError as e: + print('PgDiff error:', str(e)) + + +cls = SchemaDiffTool +