Обсуждение: plpython returns integer[] fails for multi-dimensional array
In postgresql-9.0.1 I have to modify my plpython functions that return arrays. It seems one dimesional arrays are handled properly, but not 2-dimensional arrays. create or replace function atest() returns integer[] as $eopy$ a = list() a.append(1) a.append(2) a.append(3) #return a works fine b = list() b.append(a) b.append(a) # error return b $eopy$ language plpythonu select atest() gives obtest=# select atest(); ERROR: invalid input syntax for integer: "[1, 2, 3]" CONTEXT: while creating return value PL/Python function "atest" How can I return multi-dimensional arrays in plpython? TJ O'Donnell
On 21 December 2010 22:48, TJ O'Donnell <tjo@acm.org> wrote: > In postgresql-9.0.1 I have to modify my plpython functions that return arrays. > It seems one dimesional arrays are handled properly, but not > 2-dimensional arrays. > > create or replace function atest() returns integer[] as $eopy$ > a = list() > a.append(1) > a.append(2) > a.append(3) > #return a works fine > b = list() > b.append(a) > b.append(a) > # error > return b > $eopy$ language plpythonu > > > select atest() gives > obtest=# select atest(); > ERROR: invalid input syntax for integer: "[1, 2, 3]" > CONTEXT: while creating return value > PL/Python function "atest" > > How can I return multi-dimensional arrays in plpython? Are you sure that "a" returns okay in that scenario. You're using a list. Shouldn't you be using an array? Like: a = [] -- Thom Brown Twitter: @darkixion IRC (freenode): dark_ixion Registered Linux user: #516935
On 21 December 2010 23:17, Thom Brown <thom@linux.com> wrote: > Are you sure that "a" returns okay in that scenario. You're using a > list. Shouldn't you be using an array? Like: a = [] a =[] actually declares an empty list in Python. You can return a list or a tuple from a pl/python function in 9.0 and it will be interpreted as an array at the SQL call site. You cannot in prior versions. -- Regards, Peter Geoghegan
On Tuesday 21 December 2010 2:48:16 pm TJ O'Donnell wrote: > In postgresql-9.0.1 I have to modify my plpython functions that return > arrays. It seems one dimesional arrays are handled properly, but not > 2-dimensional arrays. > > create or replace function atest() returns integer[] as $eopy$ > a = list() > a.append(1) > a.append(2) > a.append(3) > #return a works fine > b = list() > b.append(a) > b.append(a) > # error > return b > $eopy$ language plpythonu > > > select atest() gives > obtest=# select atest(); > ERROR: invalid input syntax for integer: "[1, 2, 3]" > CONTEXT: while creating return value > PL/Python function "atest" > > How can I return multi-dimensional arrays in plpython? > > TJ O'Donnell Maybe: create or replace function atest() returns integer[][] -- Adrian Klaver adrian.klaver@gmail.com
On Tuesday 21 December 2010 3:25:48 pm Peter Geoghegan wrote: > On 21 December 2010 23:17, Thom Brown <thom@linux.com> wrote: > > Are you sure that "a" returns okay in that scenario. You're using a > > list. Shouldn't you be using an array? Like: a = [] > > a =[] actually declares an empty list in Python. You can return a list > or a tuple from a pl/python function in 9.0 and it will be interpreted > as an array at the SQL call site. You cannot in prior versions. > > -- > Regards, > Peter Geoghegan Digging into the source for plpython seems to show it only supports one dimensional arrays. When I tried my previous example on a 9.0.1 instance it kept changing integer[][] to integer[]. -- Adrian Klaver adrian.klaver@gmail.com
In previous versions (8.x) for plpython fn returning integer[] I created (had to create) a string in the proper SQL format { {1,2,3}, {4,5,6} } and returned that. It worked fine. I LIKE the ability to not have to do that in 9.0 but I CAN'T return and string like { {1,2,3}, {4,5,6} } for a fn that returns integer[] AND I can't return a two-dimensional array. Not a happy 9.0 camper. Anyone know of any plans to 9.0 plpython to support multi-dimensional arrays? TJ O'Donnell On Tue, Dec 21, 2010 at 4:02 PM, Adrian Klaver <adrian.klaver@gmail.com> wrote: > On Tuesday 21 December 2010 3:25:48 pm Peter Geoghegan wrote: >> On 21 December 2010 23:17, Thom Brown <thom@linux.com> wrote: >> > Are you sure that "a" returns okay in that scenario. You're using a >> > list. Shouldn't you be using an array? Like: a = [] >> >> a =[] actually declares an empty list in Python. You can return a list >> or a tuple from a pl/python function in 9.0 and it will be interpreted >> as an array at the SQL call site. You cannot in prior versions. >> >> -- >> Regards, >> Peter Geoghegan > > Digging into the source for plpython seems to show it only supports one > dimensional arrays. When I tried my previous example on a 9.0.1 instance it > kept changing integer[][] to integer[]. > > -- > Adrian Klaver > adrian.klaver@gmail.com >