From: | Adrian Klaver <aklaver(at)comcast(dot)net> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Cc: | Nuno Mota <nmota(at)net-bo(dot)com> |
Subject: | Re: plpython return setof and yield |
Date: | 2009-08-17 14:21:15 |
Message-ID: | 200908170721.15375.aklaver@comcast.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
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(at)comcast(dot)net
From | Date | Subject | |
---|---|---|---|
Next Message | Sam Mason | 2009-08-17 15:17:45 | Re: comparing NEW and OLD (any good this way?) |
Previous Message | Harald Fuchs | 2009-08-17 14:00:54 | Re: Generating random unique alphanumeric IDs |