Search Postgresql Archives

PL/Python flattens composite types to string?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I recently wrote PL/Python code that worked on fields of composite types.

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.  To my chagrin 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.

I was able to work around this problem in an ugly way, but I can imaging
cases where this would render plpy 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.

Is this a bug?  This is psql v. 8.1.18 on one machine, and 8.4.1 on another.

Am I somehow doing it wrong?
	-- See attached test

Cheers!

-- 
| -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
| 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
| -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
-- vim:set filetype=pgsql:
/** Illustrates PL/Py flattening of composite types

* Log in as user 'postgres' in directory containing this file, start psql,
  then
       create language plpythonu;    -- if haven't done already
       \i pycomptype.sql
       select pycomptypes.color_read( 1 );
* To get rid of the tables
       drop schema pycomptypes cascade;
*/

CREATE SCHEMA pycomptypes AUTHORIZATION postgres;
SET search_path TO pycomptypes;


CREATE TYPE value_sigma AS (
	value               DOUBLE PRECISION,
	sigma               DOUBLE PRECISION
);

CREATE TABLE colors (
	colors_id	INTEGER PRIMARY KEY,
	red	value_sigma,
	green	value_sigma,
	blue	value_sigma
);

INSERT INTO colors VALUES ( 1, (1.21, 0.05), (1.45, 0.06), (1.83, 0.07) );
INSERT INTO colors VALUES ( 2, (0.94, 0.05), (0.38, 0.03), (1.81, 0.07) );
INSERT INTO colors VALUES ( 3, (0.56, 0.02), (0.74, 0.05), (1.90, 0.08) );

CREATE OR REPLACE FUNCTION
        color_read( color_id INTEGER )
RETURNS VOID AS $$
cmd = 'SELECT red,green,blue FROM colors WHERE colors_id=' + str( color_id )

for t in plpy.execute( cmd ):
	plpy.notice( 'type of color item: %s' % ( type( t['red'] ) ) )

$$ LANGUAGE PLPYTHONU;

GRANT SELECT ON colors TO PUBLIC;
GRANT USAGE ON SCHEMA pycomptypes TO PUBLIC;
-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux