pgtoolkit/tools/schemadiff.py
changeset 104 d8ff52a0390f
parent 103 24e94a3da209
child 105 10551741f61f
equal deleted inserted replaced
103:24e94a3da209 104:d8ff52a0390f
     1 from pgtoolkit.toolbase import SrcDstTool
       
     2 from pgtoolkit import pgmanager, pgbrowser, pgdiff, toolbase
       
     3 
       
     4 
       
     5 class SchemaDiffTool(SrcDstTool):
       
     6 
       
     7     """
       
     8     Print differences in database schema.
       
     9 
       
    10     Prints changes from source to destination.
       
    11     SQL patch updates source database schema to destination schema.
       
    12 
       
    13     """
       
    14 
       
    15     def __init__(self):
       
    16         SrcDstTool.__init__(self, name='schemadiff', allow_reverse=True)
       
    17 
       
    18     def specify_args(self):
       
    19         SrcDstTool.specify_args(self)
       
    20         self.parser.add_argument('-s', dest='schema', nargs='*', help='Schema filter')
       
    21         self.parser.add_argument('-t', dest='table', nargs='*', help='Table filter')
       
    22         self.parser.add_argument('-f', dest='function', type=str, help='Function filter (regex)')
       
    23         self.parser.add_argument('--sql', action='store_true', help='Output is SQL script.')
       
    24         self.parser.add_argument('--body', action='store_true', help='Output diff for function bodies.')
       
    25 
       
    26     def main(self):
       
    27         srcbrowser = pgbrowser.PgBrowser(self.pgm.get_conn('src'))
       
    28         dstbrowser = pgbrowser.PgBrowser(self.pgm.get_conn('dst'))
       
    29 
       
    30         pgd = pgdiff.PgDiff(srcbrowser, dstbrowser)
       
    31 
       
    32         try:
       
    33             if self.args.schema:
       
    34                 pgd.filter_schemas(include=self.args.schema)
       
    35             if self.args.table:
       
    36                 pgd.filter_tables(include=self.args.table)
       
    37             if self.args.function:
       
    38                 pgd.filter_functions(self.args.function)
       
    39             if self.args.body:
       
    40                 pgd.function_body_diff = True
       
    41 
       
    42             if self.args.sql:
       
    43                 pgd.print_patch()
       
    44             else:
       
    45                 pgd.print_diff()
       
    46         except pgdiff.PgDiffError as e:
       
    47             print('PgDiff error:', str(e))
       
    48 
       
    49 
       
    50 cls = SchemaDiffTool
       
    51