Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] [OT] Algunas funciones útiles para desarrollo en postgresql

From: Anthony <asotolongo(at)uci(dot)cu>
To: Alejandro Carrillo <fasterzip(at)yahoo(dot)es>
Cc: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] [OT] Algunas funciones útiles para desarrollo en postgresql
Date: 2011-10-03 21:49:28
Message-ID: 4E8A2DE8.3040605@uci.cu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El 03/10/2011 17:29, Alejandro Carrillo escribió:
> Para insert, update y delete es más rapido como le comenté (sin
> EXECUTE consulta)
> Para el select de la tabla tiene 3 opciones:
> 1) usar un parámetro refcursor en la funcion de la tabla y mostrar el
> resultado de ese parametro usando un FETCH ALL IN CURSORNUEVO
> (recomiendo esta ya que se presta para cuando se cambie la estructura
> de la tabla, no hay que cambiar el uso de la funcion y puede devolver
> varias cursores dependiendo de los valores de entrada)
> 2) crear una function que devuelva un setof record y tener el mismo
> numero y tipo de parametros de salida que el numero y tipo de datos de
> los campos a mostrar. Más info ver:
> http://www.postgresonline.com/journal/archives/201-returns-table.html
> 3) retornar un tipo table (que a la larga es lo mismo que el punto
> anterior, toca ver cual es más veloz)
> Para EL SELECT GENERAL falta explicarlo como se debe ejecutar (un
> ejemplo como el que le habia comentado).
>
> ------------------------------------------------------------------------
> *De:* Anthony <asotolongo(at)uci(dot)cu>
> *Para:* Alejandro Carrillo <fasterzip(at)yahoo(dot)es>
> *CC:* "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
> *Enviado:* lunes 3 de octubre de 2011 16:15
> *Asunto:* Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] [OT] Algunas
> funciones útiles para desarrollo en postgresql
>
> El 03/10/2011 11:38, Alejandro Carrillo escribió:
>> Hola
>>
>> Ya le eché la revisada.
>> Que me gusto:
>> 1) La aplicación no tiene lio a la hora de instalarse, solo
>> descomprimir y ya.
>> 2) Efectivamente hace su trabajo de crear las funciones.
>>
>> Que no me gusto:
>> 1) Sentencias como RETURN QUERY EXECUTE son lentas a la hora de
>> ejecutarse y estas sentencias solo deben ejecutarse en casos donde no
>> se sepa como va a llegar la sentencia. Además se suelen prestar para
>> ejecutar inyecciones SQL. En mi concepto personal, prefiero las
>> sentencias hechas a la medida y que se vayan modificando a medida de
>> las necesidades.Ej:
>> consulta:='insert into public.dato (iddato,nombredato,fecha,edad)
>> values (' || $1 || ')' ;
>> EXECUTE consulta;
>> esta sentencia se ejecutará más lento que una función donde tome los
>> parametros y los inserte sin usar execute.
>> 2) En el manual no dice como usar las funciones, en especial la
>> funcion de Select_general.
>> La de select_general debe usarse asi:
>> select * from public.select_general('select * from dato where 1=1')
>> as tt (p_iddato integer, p_nombredato character varying, p_fecha
>> date, p_edad numeric);
>>
>> ------------------------------------------------------------------------
>> *De:* Anthony <asotolongo(at)uci(dot)cu> <mailto:asotolongo(at)uci(dot)cu>
>> *Para:* Alejandro Carrillo <fasterzip(at)yahoo(dot)es>
>> <mailto:fasterzip(at)yahoo(dot)es>
>> *CC:* "pgsql-es-ayuda(at)postgresql(dot)org"
>> <mailto:pgsql-es-ayuda(at)postgresql(dot)org>
>> <pgsql-es-ayuda(at)postgresql(dot)org> <mailto:pgsql-es-ayuda(at)postgresql(dot)org>
>> *Enviado:* viernes 5 de abril de 2002 16:11
>> *Asunto:* [pgsql-es-ayuda] Re: [pgsql-es-ayuda] [OT] Algunas
>> funciones útiles para desarrollo en postgresql
>>
>> On 03/10/11 09:41, Alejandro Carrillo wrote:
>>> http://code.google.com/p/generadorprocparapostgresql/
>>> Es un generador de procedimientos almacenados para postgresql. FUE
>>> TOMADO DE otro proyecto q estaba abandonado llamado pgp-generator.
>>> Me pareció buena la idea y para no dejarlo morir creé este proyecto.
>>> Contiene soporte para la creación de insert, delete, update y
>>> select, solo debe escribir el nombre de ls funcion, el esquema y la
>>> tabla y este se encarga de generar el procedimiento almacenado de la
>>> fucnion solicitada(insert,delete,update,select)
>>>
>>>
>>> http://code.google.com/p/datageneratorpostgresql/
>>> Es un generador de datos para tablas en postgresql. Le crea datos
>>> con el fin de probar velocidad en consultas, actualizaciones y
>>> borrados de datos en una tabla. Solo debe: 1) Crear el lenguaje
>>> plpgsql 2) Crear el schema utils para que estas funciones queden
>>> depositadas en ese schema 3) Pasar el nombre del schema, la tabla,
>>> numero de registros a insertar/generar y el numero en ascii inicial
>>> y final (ej: espacio es el nro ascii 32, comilla simple es 34) EJ:
>>> select utils.creardatostabla('public','clientes',50,32,78) 4)
>>> Disfrútalo y recomiendalo a tus amigos
>>> Posdata: Puede insertar registros con caracteres especiales como
>>> comilla simple('), doble(") y barra invertida "\", lo cual lo hace
>>> muy bueno a la hora de experimentar con campos especiales
>>>
>>> 2 proyectos de su humilde servidor.
>>>
>>> ¿Opiniones, sugerencias, correcciones?
>> Hola algo como lo primero que pones tenemos algo por aca desarrollado
>> en su version inicial (CRUD-PG) , aunque hemos organizado algunas
>> ideas que pretendemos poner en el futuro para mejorarlo, pero este
>> esta funcional si deseas conocerlo esta aqui
>> http://postgresql.uci.cu/node/74
>>
>> y el link de descarga:
>> http://postgresql.uci.cu/descargas/tools/CRUD-PG%201.1.tar.bz2
>>
>> saludos
>>
>> PD: el segundo que envias tampoco lo conocia , pero me interesa
>> utilizarlos gracias.
>>
>>
> me alegro que tengas aspectos que le guste tendré en cuenta sus
> sugerencias, pero es que utilizo el ejemplo que usted me sugiere para
> ejecutar las sentencias(insert, update y delete) Ej:consulta:='insert
> into public.dato (iddato,nombredato,fecha,edad) values (' || $1 ||
> ')' ; EXECUTE consulta;
>
> pero para consultas select que me interesa el resultado tengo que
> ejecutarlos con RETURN QUERY EXECUTE pues es la única forma que
> conozco, al menos yo, de ejecutar conusltas dinámicas formadas por
> concatenacion de cadenas y pueden variar , entiendo que son un poco
> lentas si las ejecuto asi pero bueno, si desea coolaborar con la
> solucion , son bienvenidos sus sugerencias, hace tiempo que no le hago
> nada.
> saludos y gracias!!!
>
>
Ok , Gracias!!!! a todos miren este ejemplo usando cursores pero de otro
modo al que me dicen que es como los entiendo y diganme si lo recomiendan?:
CREATE OR REPLACE FUNCTION cliente_select_condicional_cursor(condicional
text)
RETURNS SETOF cliente AS
$BODY$
DECLARE
resultado public."cliente" ;
consulta text ;
micursor refcursor;
begin
open micursor for execute 'select * from public."cliente" where ' || $1;
loop
fetch micursor into resultado;
exit when not found;
return next resultado;

end loop;
return;
end;
$BODY$
LANGUAGE plpgsql VOLATILE

despues llamo la funcion: select * from
cliente_select_condicional_cursor('id=1')

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alejandro Carrillo 2011-10-03 22:50:30 Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] [OT] Algunas funciones útiles para desarrollo en postgresql
Previous Message Alejandro Carrillo 2011-10-03 21:29:03 Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] [OT] Algunas funciones útiles para desarrollo en postgresql