From: | Nuno Mota <nmota(at)net-bo(dot)com> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Subject: | plpython return setof and yield |
Date: | 2009-08-17 00:13:51 |
Message-ID: | d79bf9b30908161713i3de39b43t88c0f3a42d211b35@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
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
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2009-08-17 00:50:49 | Re: plpgsql function to validate e-mail |
Previous Message | Alvaro Herrera | 2009-08-17 00:12:43 | Re: Generating random unique alphanumeric IDs |