set SRF plpython
FERNANDO VILLARROEL
fvillarroel en yahoo.com
Mie Abr 5 05:21:50 CEST 2006
> Sería lo mismo, pero cambiando el tipo de dato que
> retorna para indicar que es
> un conjunto:
>
> create or replace function cli() returns setof text
> as '
> ...
>
>
Hola Chema sabes probe como tu me sugieres pero la
funcion se queda colgada y no termina hasta que yo la
quiebre con un Ctrl C ;
prueba=# drop function cli();
DROP FUNCTION
prueba=# \i ejem5.sql
CREATE FUNCTION
prueba=# select cli();
Cancel request sent
ERROR: cancelando consulta debido a una petición del
usuario
prueba=#
Y la funcion la redefini como me lo sugeriste quedando
asi;
create or replace function cli() returns setof text as
'
plan = plpy.prepare("SELECT rut ,nombre FROM uno ")
rv = plpy.execute(plan)
return [ (r["rut"],r["nombre"]) for r in rv]
'
LANGUAGE 'plpythonu';
> Si lo quieres más refinado, puedes crearte un tipo
> de dato propio:
>
> -- Por ejemplo...
> create type compuesto as (rut char(20), nombre
text);
>
> create or replace function cli() returns setof
> compuesto as '
> plan = plpy.prepare("SELECT rut ,nombre FROM uno
> ")
> rv = plpy.execute(plan)
>
> return [ (r["rut"],r["nombre"]) for r in rv]
> '
> LANGUAGE 'plpythonu';
El segundo metodo tambien me fallo;
prueba=# create type compuesto as (rut int4, nombre
varchar(20));
CREATE TYPE
prueba=# \i ejem6.sql
CREATE FUNCTION
prueba=# select cli2();
ERROR: tuple return types are not supported yet
prueba=#
create or replace function cli2() returns setof
compuesto as '
plan = plpy.prepare("SELECT rut ,nombre FROM uno")
rv = plpy.execute(plan)
return [ (r["rut"],r["nombre"]) for r in rv]
'
LANGUAGE 'plpythonu';
> ######
> NOTA: A partir del postgresql 8.x las SRFs funcionan
> de otra manera, más
> parecidas a los generadores de python. En la versión
> 8.1 es preciso parchear
> el postgresql:
Que crees que sucede.
Saludos Fernando.
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
Más información sobre la lista de distribución Python-es