Buen dia a todos trabajo con bases de datos postgis y tengo algunas consultas respecto de las funciones que les pondre a continuación de esta explicación:
de las 3 funciones que coloco aquí las preguntas serian: pueden estas 3 funciones escribirse en lenguaje C? si la respuesta es si me podrian dar un ejemplo de como transformar esto a lenguaje C? Que necesitaria para compilar esto en windows? ya que lo unico que he logrado compilar en windows para postgres hasta ahora es el clasico ejemplo de esto. #include <postgres.h> #include <fmgr.h> #ifdef PG_MODULE_MAGIC PG_MODULE_MAGIC; #endif PG_FUNCTION_INFO_V1(add_one); Datum add_one(PG_FUNCTION_ARGS) { int32 arg = PG_GETARG_INT32(0); PG_RETURN_INT32(arg + 1); } Podrian explicarme porque alguna de ellas no seria posible que funcionen en C? La razon de escribir estas funciones en C es que quiero mejorar la performance de mi sistema y quisiera saber si al estar escritas en C estas se podrian ejecutar mas rapido. Ya que tengo funciones mas complejas a estas en el sentido que hacen mas deletes inserts y update basicamente en 2 o 3 tablas pero son operaciones que implican por ejemplo eliminar 50000 lineas de vias y volver a cargar unas 60000 nuevas que corresponden a un nuevo sector grafico que es un poligono por ejemplo de una urbanización y encuentro todas las calles que hay dentro de esta urbanización y cosas asi Espero sus comentarios y gracias por su tiempo las funciones son estas: CREATE OR REPLACE FUNCTION vias_limitrofes_sub_sectores() RETURNS trigger AS $BODY$ BEGIN IF NEW.the_geom <> old.the_geom THEN NEW.area_sub_sector = round(st_area(NEW.the_geom)::numeric,2); delete from op_vias_limites_sub_sectores_abastecimiento where myid = new.myid; INSERT INTO op_vias_limites_sub_sectores_abastecimiento (myid,gid) select s.myid,v.gid from op_sub_sectores_abastecimiento s,cat_vias v where s.myid = new.myid and st_intersects(buffer(s.the_geom,3),v.the_geom); END IF; RETURN NEW; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION vias_limitrofes_sub_sectores() basicamente lo que hace es cuando cambia la geometria de un sector elimina las lineas de calles y vuelve a obtenerles en funcion de la nueva geometria y esta otra función CREATE OR REPLACE FUNCTION geographyforgoogle() RETURNS trigger AS $BODY$ DECLARE BEGIN -- NEW.long_xy := round(cast(st_length(NEW.the_geom) as numeric),2); NEW.geography := transform(NEW.the_geom_origen,4326); NEW.latitud:= substring(st_astext(NEW.geography) from position('-8' in st_astext(NEW.geography)) for char_length(st_astext(NEW.geography))-position('-8' in st_astext(NEW.geography))); NEW.longitud:= substring(st_astext(NEW.geography) from 7 for position('-' in substring(st_astext(NEW.geography) from 8 for char_length(st_astext(NEW.geography))))-1); RETURN NEW; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION geographyforgoogle() esta obtiene las coordenadas en el formato que necesito para localizar un punto en googlemaps y esta que es para listar los permisos de un usuarios CREATE OR REPLACE FUNCTION sp_listarpermiso(integer, integer, integer) RETURNS SETOF record AS $BODY$ DECLARE r RECORD; BEGIN FOR r IN select permiso_id, t.tarea_id, tar_nombre, tar_descripcion, gru_descripcion, pso_activo from tarea t inner join grupo g on t.grupo_id = g.grupo_id inner join permiso p on t.tarea_id = p.tarea_id where p.rol_id = $3 order by t.tarea_id LIMIT $1 offset $2 LOOP RETURN NEXT r; END LOOP; RETURN; END; $BODY$ LANGUAGE plpgsql VOLATILE -- José Mercedes Venegas Acevedo cel: Mov. 949808846 mails: jvenegasp...@php.net jvenegasp...@gmail.com PHP Spanish Docs translator member. http://www.php.net/manual/es/index.php