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