On Sunday 16 August 2009 5:13:51 pm Nuno Mota wrote: > 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 As a guess, in the first example you have the function creating two result sets without declaring which one to return. In the second example you are using the generator alone. -- Adrian Klaver aklaver@xxxxxxxxxxx -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general