Thread: PL/Python set returning functions
Hi, How can I return some rows from my PL/Python function? I wrote: dbmail=# create type composite as (id bigint, name text); CREATE TYPE dbmail=# create or replace function csrf() returns setof composite as $$ dbmail$# return ((1, "james"), (2, "bob"), (3, "fargus")) dbmail$# $$ language plpythonu; CREATE FUNCTION dbmail=# select csrf(); ERROR: plpython functions cannot return tuples yet What's wrong? -- Thanks, Eugene Prokopiev
Eugene Prokopiev wrote: > Hi, > > How can I return some rows from my PL/Python function? > > I wrote: > > dbmail=# create type composite as (id bigint, name text); > CREATE TYPE > dbmail=# create or replace function csrf() returns setof composite as $$ > dbmail$# return ((1, "james"), (2, "bob"), (3, "fargus")) > dbmail$# $$ language plpythonu; > CREATE FUNCTION > dbmail=# select csrf(); > ERROR: plpython functions cannot return tuples yet > select * from csrf(); > What's wrong? > > -- > Thanks, > Eugene Prokopiev > > ---------------------------(end of broadcast)--------------------------- > TIP 5: don't forget to increase your free space map settings -- The PostgreSQL Company - Command Prompt, Inc. 1.503.667.4564 PostgreSQL Replication, Consulting, Custom Development, 24x7 support Managed Services, Shared and Dedicated Hosting Co-Authors: PLphp, PLperl - http://www.commandprompt.com/
On Thu, Dec 01, 2005 at 11:02:38AM -0800, Joshua D. Drake wrote: > Eugene Prokopiev wrote: > >How can I return some rows from my PL/Python function? > > > >I wrote: > > > >dbmail=# create type composite as (id bigint, name text); > >CREATE TYPE > >dbmail=# create or replace function csrf() returns setof composite as $$ > >dbmail$# return ((1, "james"), (2, "bob"), (3, "fargus")) > >dbmail$# $$ language plpythonu; > >CREATE FUNCTION > >dbmail=# select csrf(); > >ERROR: plpython functions cannot return tuples yet > > > select * from csrf(); Not in this case: test=# select * from csrf(); ERROR: plpython functions cannot return tuples yet As far as I can tell from the source code, PL/Python doesn't support returning composite types or sets (somebody please correct me if I'm mistaken). You might want to investigate PostgresPy. I haven't used it myself and I think it's still in development, but it's probably worth a look if you're using Python. I'm sure the developer would appreciate any feedback. http://python.projects.postgresql.org/ -- Michael Fuhr