Thread: BUG #5272: PL/Python SELECT: return composite fields as dict, not str

BUG #5272: PL/Python SELECT: return composite fields as dict, not str

From
"Steve White"
Date:
The following bug has been logged online:

Bug reference:      5272
Logged by:          Steve White
Email address:      swhite@aip.de
PostgreSQL version: 8.4.2
Operating system:   Linux
Description:        PL/Python SELECT: return composite fields as dict, not
str
Details:

Hi,

As recently posted in the mailing list,
http://archives.postgresql.org/pgsql-general/2010-01/msg00389.php
(where you will find a test file, not reproduced here.):

The plpy.execute() command on a SELECT returns a list of nice dictionaries
keyed on field names, containing the fields.  For numeric types, the type of
the dictionary values are as expected.  Unfortunately however, if a field
contains a composite type, it is flattened to a string.

I would have expected a composite type field to be returned as a dictionary
of values of the proper types, keyed on the names of the elements of the
composite type.  After all, it's a DB system that supports hierarchies, and
a programming language that beautifully supports them.

In my case, I was able to work around this problem in an ugly way, but I can
imagine cases where this would render PL/Python unsuitable.

I see nothing in the documentation about this
    http://www.postgresql.org/docs/8.4/static/plpython.html
It only talks about passing composite types into and out of functions.

This is an unpleasant discovery for those working to a deadline.  Perhaps a
"limitations" section for the doc would be in order.  (You could also list
the limitations of PL/Python regarding returning RECORD types.)

But the best thing to do would be to fix it.

For backward compatibility, you might implement a switch that turns on the
hierarchical interpretation of fields, and leave the current behaviour as
the default.

Cheers!

Re: BUG #5272: PL/Python SELECT: return composite fields as dict, not str

From
Robert Haas
Date:
On Mon, Jan 11, 2010 at 11:41 AM, Steve White <swhite@aip.de> wrote:
> I see nothing in the documentation about this
> =A0 =A0 =A0 =A0http://www.postgresql.org/docs/8.4/static/plpython.html
> It only talks about passing composite types into and out of functions.
>
> This is an unpleasant discovery for those working to a deadline. =A0Perha=
ps a
> "limitations" section for the doc would be in order. =A0(You could also l=
ist
> the limitations of PL/Python regarding returning RECORD types.)

Maybe you could suggest some text, perhaps in the form of a context
diff against the current sgml files?

> But the best thing to do would be to fix it.

Doubtless.  Of course it will depend on whether anyone finds enough
round tuits.  Peter Eisentraut made some improvements to PL/python
array handling which will be in the next major release, but I am not
aware of anyone working on record types.  This is an all-volunteer
effort, so people tend to scratch their own itches.

> For backward compatibility, you might implement a switch that turns on the
> hierarchical interpretation of fields, and leave the current behaviour as
> the default.

I suspect we wouldn't bother with that.

...Robert

Re: BUG #5272: PL/Python SELECT: return composite fields as dict, not str

From
Steve White
Date:
Hi all,

Robert suggested that I start some documentation about limitations of
PL/Python.  Find attached.

I think it would also be good to explain the meaning of "trusted" regarding
PL/Python, and how it might impact the user.  There is already some
commented-out doc, and also something in the PL/Perl section.
Specifically, a user might want to know if it is actually dangerous to
use PL/Python, etc.  If it is dangerous, how, and for whom?  Where should
one be careful?

Cheers!

On 11.01.10, Robert Haas wrote:
> On Mon, Jan 11, 2010 at 11:41 AM, Steve White <swhite@aip.de> wrote:
> > I see nothing in the documentation about this
> >        http://www.postgresql.org/docs/8.4/static/plpython.html
> > It only talks about passing composite types into and out of functions.
> >
> > This is an unpleasant discovery for those working to a deadline.  Perhaps a
> > "limitations" section for the doc would be in order.  (You could also list
> > the limitations of PL/Python regarding returning RECORD types.)
>
> Maybe you could suggest some text, perhaps in the form of a context
> diff against the current sgml files?
>

--
| -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
| Steve White                                             +49(331)7499-202
| e-Science / AstroGrid-D                                   Zi. 35  Bg. 20
| -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
| Astrophysikalisches Institut Potsdam (AIP)
| An der Sternwarte 16, D-14482 Potsdam
|
| Vorstand: Prof. Dr. Matthias Steinmetz, Peter A. Stolz
|
| Stiftung privaten Rechts, Stiftungsverzeichnis Brandenburg: III/7-71-026
| -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -

Attachment

Re: BUG #5272: PL/Python SELECT: return composite fields as dict, not str

From
Peter Eisentraut
Date:
On sön, 2010-01-31 at 13:20 +0100, Steve White wrote:
> Robert suggested that I start some documentation about limitations of
> PL/Python.  Find attached.
>
> I think it would also be good to explain the meaning of "trusted" regarding
> PL/Python, and how it might impact the user.  There is already some
> commented-out doc, and also something in the PL/Perl section.
> Specifically, a user might want to know if it is actually dangerous to
> use PL/Python, etc.  If it is dangerous, how, and for whom?  Where should
> one be careful?

I have added some documentation for both of these issues along the lines
suggested by you.