Re: plpython return setof and yield

From: Nuno Mota <nmota(at)net-bo(dot)com>
To: Adrian Klaver <aklaver(at)comcast(dot)net>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: plpython return setof and yield
Date: 2009-08-17 17:43:05
Message-ID: d79bf9b30908171043v8a91507xa7a064de62f78ab4@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Thank you very much,

Can i ask one more question ?

How do I declare the correct result set to return, this in first example
code, is it possible ?

Thank you again,
Nuno Mota

On Mon, Aug 17, 2009 at 3:21 PM, Adrian Klaver <aklaver(at)comcast(dot)net> wrote:

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

--
Nuno Mota <nmota(at)net-bo(dot)com>

Management Solutions for POS
Tlf: 351 225322000
Mob: 351 936272176
Fax: 351 226177662
http://www.net-bo.com

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2009-08-17 17:43:47 Re: pg_autovacuum exceptions question
Previous Message Tom Lane 2009-08-17 17:41:25 Re: ERROR: attempted to delete invisible tuple