#!/usr/bin/env python3 # -*- coding: UTF-8 -*- from pycen import con_fon as con from sqlalchemy import text db = 'bd_cen' host = '91.134.194.221' port = '5432' srv_name = 'fdw_bd-cen-38' tab_name = 'cr_line_saisie_travaux' sch_name = 'travaux' view_name = 'travaux_ligne' user = 'cen_admin' pwd = '#CEN38@venir' dict_cols = { 'gid': 'serial4', 'geom': 'public.geometry(linestring, 2154)', 'id_site': 'varchar', 'annee_trav': 'int4', 'id_gestion': 'int4', 'id_presta': 'int4', 'etat_trav': 'varchar', 'nom_presta': 'varchar', 'date_debut': 'date', 'duree_trav': 'float8', 'nb_etp': 'float8', 'nb_balle': 'int4', 'val_mat': 'int4', 'legende': 'varchar', 'rmq': 'varchar', 'prestation': 'int4', 'long_m': 'float8', 'crea_date': 'date', 'date_update': 'date', 'date_fin': 'date', } col_table = ','.join([' '.join([key,val]) for key, val in dict_cols.items()]) table = ''' DROP FOREIGN TABLE IF EXISTS {sch_name}.{tab_name} CASCADE; CREATE FOREIGN TABLE IF NOT EXISTS {sch_name}.{tab_name} ( {columns} ) SERVER "{fgn_server}" OPTIONS (schema_name '{sch_name}', table_name '{tab_name}'); '''.format( sch_name=sch_name, tab_name=tab_name, columns=col_table, fgn_server=srv_name ) col_view = ','.join(dict_cols.keys()) view = ''' CREATE OR REPLACE VIEW {sch_name}.{v_name} AS SELECT {columns} FROM {sch_name}.{tab_name}; ALTER TABLE {sch_name}.{v_name} OWNER TO cen_admin; GRANT ALL ON TABLE {sch_name}.{v_name} TO cen_admin; GRANT SELECT ON TABLE {sch_name}.{v_name} TO grp_sig; GRANT SELECT ON TABLE {sch_name}.{v_name} TO cen_user; '''.format( sch_name=sch_name, tab_name=tab_name, v_name=view_name, columns=col_view ) with con.begin() as cnx: cnx.execute(text(table)) cnx.execute(text(view))