BUG #15590: crosstab_hash unable to work with modified types (CreateTupleDescCopy returning dropped attributes?)

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

BUG #15590: crosstab_hash unable to work with modified types (CreateTupleDescCopy returning dropped attributes?)

PG Doc comments form
The following bug has been logged on the website:

Bug reference:      15590
Logged by:          Guillaume Outters
Email address:      [hidden email]
PostgreSQL version: 9.6.11
Operating system:   FreeBSD 10.2
Description:        

Encapsulating crosstab_hash in a function (to define its return type) does
not work when the (user-defined) return type owns 'dropped' attributes.

begin transaction;
create type t as (id int, i int, j int);
create function ctt(text, text)
        returns setof t
        as '$libdir/tablefunc', 'crosstab_hash' language c;
select * from ctt($$ select * from (values (1, 'j', 123), (1, 'i', 0)) t $$,
$$ select * from (values ('i'), ('j')) t $$);
-- -> Works as expected, returns 3 columns: 1 0 123
alter type t add attribute bla text;
alter type t drop attribute bla;
create table tab of t;
select a.* from pg_class c, pg_attribute a where relname in ('t', 'tab') and
c.oid = a.attrelid;
-- -> Type t shows its 4 columns, with bla having been renamed to
'........pg.dropped.4........' an flagged attisdropped
-- -> Table tab was created with 3 columns (correctly ignored t's dropped
column).
select * from ctt($$ select * from (values (1, 'j', 123), (1, 'i', 0)) t $$,
$$ select * from (values ('i'), ('j')) t $$);
-- -> Crashes with:
--   Error: ERROR: invalid return type
--    Détail : Query-specified return tuple has 4 columns but crosstab
returns 3.
--  SQLState:  42601
--  ErrorCode: 0
rollback;

Reply | Threaded
Open this post in threaded view
|

Re: BUG #15590: crosstab_hash unable to work with modified types (CreateTupleDescCopy returning dropped attributes?)

Andrew Gierth
>>>>> "PG" == PG Bug reporting form <[hidden email]> writes:

 PG> Encapsulating crosstab_hash in a function (to define its return
 PG> type) does not work when the (user-defined) return type owns
 PG> 'dropped' attributes.

Yeah. The code to generate tuples doesn't make any attempt to handle
dropped columns in the result. This is nothing to do with
CreateTupleDescCopy.

I guess this has always been broken; there's no evidence that the code
ever made any attempt to handle it. I'll see about fixing it.

--
Andrew (irc:RhodiumToad)