Retornar registros plpython
Chema Cortes
pych3m4 en gmail.com
Mar Abr 11 11:38:12 CEST 2006
On 4/7/06, FERNANDO VILLARROEL <fvillarroel en yahoo.com> wrote:
> Hola probe con las siguientes funcionea segun lo que
> me rocomendo Chema, 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=#
Para funciones que retornan sets (SRFs), deberías invocarlas de esta forma:
select * from cli();
Una invocación directa (como UDF) parece que no sabe cuándo termina,
por lo que puede ser necesario que indiques un límite; pero en mis
pruebas, a veces funciona con límite y otras veces no.
> He indagagado mas al respecto mas precisamente en la
> lista de Postgresql y me han contestado que esto
> (returns setof) no esta implementado en Postgres para
> plpython, me recomiendan hecharle un vistazo a plperl,
> pero no me interesa pues mi ambito es Python.
Es la conclusión que he sacado de mis pruebas. Siempre puedes parchear
postgresql, con las dificultades que se pueden esperar.
> Existe algun truco para hacer esto, como por ejemplo
> con los diccionarios SD y GD?
La opción más simple que se me ocurre es que la función python guarde
el resultado en una tabla temporal y programar la función SRF en
pl/pgsql para que extraiga esta tabla.
Más información sobre la lista de distribución Python-es