The following bug has been logged online:
Bug reference: 5128
Logged by:
Email address: landreville@deadtreepages.com
PostgreSQL version: 8.4
Operating system: FreeBSD
Description: Returning nested composite types in plpython
Details:
I have nested custom types and when I try to return a mapping in python the
nested type gives me a malform record error. Here is my test code and the
error:
create type type1 as (
col1 text,
col2 text
);
create type type2 as (
col1 text,
col2 text,
test_type type1
);
create function returnComposite(test_one text, test_three text) RETURNS
type2 as
$$
return {'col1': test_one, 'col2': test_one, 'test_type': {'col1': test_two,
'col2': test_two}}
$$ language plpythonu;
select returnComposite('test1','test2')
ERROR: malformed record literal: "{'col2': 'test2', 'col1': 'test2'}"
SQL state: 22P02
Detail: Missing left parenthesis.
If I put the nested type as ('test': test_two) it will return me the type
but it includes extra quotes. The only way to make this work is make a
select using plpy returning a type2 column.
It would seem that the nested composite type is not being processed by
plpython and going straight to the rowtypes processing.