def get_foreign_keys()

in pgsmo/objects/table_objects/constraints_utils.py [0:0]


def get_foreign_keys(server, tid, fkid=None):

    server_version = server.connection.server_version

    sql = templating.render_template(
        templating.get_template_path(GET_FOREIGN_CONSTRAINT_TEMPLATE_ROOT, 'properties.sql', server_version),
        macro_roots=None,
        tid=tid, cid=fkid
    )

    result = server.connection.execute_dict(sql)

    for fk in result[1]:
        sql = templating.render_template(
            templating.get_template_path(
                GET_FOREIGN_CONSTRAINT_TEMPLATE_ROOT,
                'get_constraint_cols.sql',
                server_version),
            macro_roots=None,
            tid=tid,
            keys=zip(fk['confkey'], fk['conkey']),
            confrelid=fk['confrelid'])

        res = server.connection.execute_dict(sql)

        columns = []
        cols = []
        for row in res[1]:
            columns.append({"local_column": row['conattname'],
                            "references": fk['confrelid'],
                            "referenced": row['confattname'],
                            "references_table_name":
                                fk['refnsp'] + '.' + fk['reftab']})
            cols.append(row['conattname'])

        fk['columns'] = columns

        if not fkid:
            schema, table = get_parent(server, fk['columns'][0]['references'])
            fk['remote_schema'] = schema
            fk['remote_table'] = table

        coveringindex = search_coveringindex(server, tid, cols)
        fk['coveringindex'] = coveringindex
        if coveringindex:
            fk['autoindex'] = False
            fk['hasindex'] = True
        else:
            fk['autoindex'] = True
            fk['hasindex'] = False

    return result[1]