Search Postgresql Archives

plpython return setof and yield

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I am kind of new into python, and I have been trying to port some plperl functions into plpython, but I've run up into a problem.

Imagine the following plpython code.

CREATE OR REPLACE FUNCTION greet (how text)
  RETURNS SETOF greeting
AS $$
  rv = plpy.execute("SELECT 1")

  for article in range(10) :
    for other in range(10) :
        if (other == 1) : continue
        yield([article,other])
$$LANGUAGE plpythonu;

When executing the function on the psql console I always the this error.

netbo-dev=# select * from greet('Nuno');
ERROR:  error fetching next item from iterator

If I comment the first line:

rv = plpy.execute("select 1")

Turning the code into this:

CREATE OR REPLACE FUNCTION greet (how text)
  RETURNS SETOF greeting
AS $$
  #rv = plpy.execute("SELECT 1")

  for article in range(10) :
    for other in range(10) :
        if (other == 1) : continue
        yield([article,other])
$$LANGUAGE plpythonu;

The code works:

netbo-dev=# select * from greet('Nuno');
 how | who
-----+-----
 0   | 0
 0   | 2
 0   | 3
 0   | 4
 0   | 5
 0   | 6

I know the example code is not the best, but What I was tryng to do is execute some SQL then process it and return it back.

I also know I could just generate the rows and place them in a list and then return it, but I would like to know why the yield function does'nt work in this case.

This was tried on with:

PostgreSQL 8.3.7 and Python 2.5.1

Thanks,
Nuno Mota


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux