from pycen import con # import pycen s1 = '''create trigger get_communnes_intersects after insert or delete or update on sites.r_sites_geom for each row execute function sites.refresh_site_comm()''' s2 = '''CREATE OR REPLACE FUNCTION sites.refresh_site_comm() RETURNS trigger LANGUAGE plpgsql AS $function$ BEGIN with t1 as ( SELECT id, nom_com, insee_com, geom FROM flux_geo.vm_communes_isere ), t2 as (SELECT s.id_site, json_object_agg(t1.insee_com,t1.nom_com) all_comm, max(s.date) date, s.geom -- FROM s1 s, t1 FROM sites.r_sites_geom s, t1 WHERE st_intersects(s.geom,t1.geom) and s.id_site = NEW.id_site GROUP BY s.id_site,s.geom,s.date ORDER BY s.id_site, s.date DESC) UPDATE sites.sites SET nom_com_json = t2.all_comm FROM t2 WHERE id = t2.id_site; IF NOT FOUND THEN UPDATE sites.sites SET nom_com = null WHERE id = t2.id_site; END IF; RETURN NEW; END; $function$ ;''' with con.begin() as cnx: cnx.execute(s1) cnx.execute(s2)