set SRF plpython

Chema Cortés py en ch3m4.org
Mie Abr 5 02:49:25 CEST 2006


El Martes, 4 de Abril de 2006 15:48, FERNANDO VILLARROEL escribió:

> Bueno vale tus comentarios. La verdad es que estoy
> utilizando Postgresql 7.4 y me gustaria saber como
> implementar un set o SRF que me comentas en plpython
> para devolver un set de registros, teniendo como
> muestra el ejemplo ;
>
> create or replace function cli() returns text as '
>
>    plan = plpy.prepare("SELECT rut ,nombre  FROM uno
> ")
>
>    rv = plpy.execute(plan)
>
>    return ["(%(rut)s,%(nombre)s)"%r for r in rv]
>  '
>  LANGUAGE 'plpythonu';

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 '
...


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';



######
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:

http://projects.commandprompt.com/public/pgsql/changeset/22415
######




Más información sobre la lista de distribución Python-es