Hello, there is a bug with types in functions. Here is an example: --drop type xyz; create type xyz as ( x numeric, y numeric, z numeric ); --drop table test_xyz ; create table test_xyz ( a int, b xyz, c xyz ); insert into test_xyz values ( 1,(11.1, 12.3, 14.5 ), (22.2, 22.3, 24.5 ) ) ; --drop function test_xyz() ; create function test_xyz() returns table ( a xyz, b xyz) as $$ select b, c from test_xyz ; $$ language sql ; --drop function test_xyz2() ; create function test_xyz2() returns table ( b xyz) as $$ select b from test_xyz ; $$ language sql ; --drop function test_xyz3() ; create function test_xyz3() returns table ( b xyz) as $$ declare bb xyz; cc xyz; begin select b, c into bb, cc from test_xyz ; return bb ; end; $$ language plpgsql ; -- ------ select * from test_xyz() ; select * from test_xyz2() ; -- 3 columns, but 1 should be correct? select b from test_xyz2() ; -- error select x from test_xyz2() ; -- never declared column select * from test_xyz3() ; -- compiling error -- ------ (I am not a member of the pg-developer mailinglist. ) Franz