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

Reply via email to