Hola Antony Buen dia ok cambie el trigger a before y cuando le asigno un valor directamente si lo hace sin embargo cuando trato de asignarle valor desde el resultado de la consulta no funciona a que podria deberse.
--Cambiando a BEFORE esto funciona NEW.total := 1000; Pero esto no select into r2 sum(ml_lineales) from padron_limpieza7 where limpieza_id = NEW.gid; NEW.total := r2.sum; tambien intente asi NEW.total := (select sum(ml_lineales) from padron_limpieza7 where limpieza_id = NEW.gid); pero no esta funcionando a que podria deberse El mié., 14 nov. 2018 a las 13:17, Anthony Sotolongo (<asotolo...@gmail.com>) escribió: > Hola José, estás seguro que el trigger debe ser AFTER? Pues para que > funcione el nuevo valor del NEW debe ser en un BEFORE. > > > Saludos > > El mié., 14 de nov. de 2018 3:06 p.m., jvenegasperu < > jvenegasp...@gmail.com> escribió: > >> Buen dia a todos >> tengo un trigger sobre una tabla que llame limpieza_colector este >> funciona bien excepto la ultima instruccion aqui el codigo >> >> CREATE TRIGGER limpieza3 >> AFTER INSERT OR UPDATE >> ON public.limpieza_colector >> FOR EACH ROW >> EXECUTE PROCEDURE public.limpieza3(); >> >> CREATE OR REPLACE FUNCTION public.limpieza3() >> RETURNS trigger AS >> $BODY$ >> DECLARE >> tot numeric(7,2); >> r record; >> r2 record; >> i float; >> BEGIN >> >> >> select into r radio_influencia from limpieza_colector where gid = >> NEW.gid; >> >> i:= r.radio_influencia; >> >> --create temp table tabb as >> truncate opl_tabb; >> insert into opl_tabb(row_number,gid,st_centroid,b) >> select >> v.row_number, >> l.gid,st_centroid(st_intersection(v.the_geom,st_buffer(l.the_geom,i))), >> st_distance(st_centroid(st_intersection(v.the_geom,st_buffer(l.the_geom,i))),st_startpoint(st_linemerge(v.the_geom))) >> as b >> from al_buzon_geo l join >> opl_taba v on st_intersects(v.the_geom,st_buffer(l.the_geom,i)) and >> st_buffer(v.the_geom,i+1) && l.the_geom; >> >> --aqui un serie de consultas en otras tablas >> >> --forma 1 >> select into r2 sum(ml_lineales) tot from padron_limpieza7 where >> limpieza_id = NEW.gid; >> NEW.total := r2.tot; >> >> --forma 2 >> NEW.total := (select sum(ml_lineales) from padron_limpieza7 where >> limpieza_id = NEW.gid); >> >> --forma 3 >> NEW.total := 1000; >> >> RETURN NEW; >> END; >> $BODY$ >> LANGUAGE plpgsql VOLATILE >> COST 100; >> ALTER FUNCTION public.limpieza3() >> OWNER TO postgres; >> >> El hecho es que he intentado actualizar el campo total de las 3 formas >> que se ven en el codigo el trigger es bastante largo hago una serie de >> consultas en otras tablas y actualizaciones todas funciona bien excepto de >> actualizar el campo total de la tabla limpieza_colector >> >> lo que ocurre aqui es que desde qgis se dibuja una linea y al momento de >> grabar ejecuto el trigger alguien tiene alguna experiencia de postgres con >> qgis. >> >> Que me de alguna luz porque el trigger no actualiza el campo en la tabla >> a que podria deberse si todo lo demas funciona sin problemas >> >> Atte >> >> -- >> José Mercedes Venegas Acevedo >> cel Mov RPC 964185205 >> >> >> -- José Mercedes Venegas Acevedo cel Mov RPC 964185205