Thread: [HACKERS] Aggregates and row types

[HACKERS] Aggregates and row types

From
Thomas Munro
Date:
Hi,

Is is expected that the first query below can be analysed and planned,
but the second can't?

explain select x from (select row(42)) s(x);

explain select count(x) from (select row(42)) s(x);
ERROR:  record type has not been registered

That may be a strange thing to want to do, but it's something I
noticed and thought I'd ask about, when I was trying (and failing) to
find a query that would get transient types into a hash table in a
parallel worker for a test case yesterday.

-- 
Thomas Munro
http://www.enterprisedb.com



Re: [HACKERS] Aggregates and row types

From
Tom Lane
Date:
Thomas Munro <thomas.munro@enterprisedb.com> writes:
> Is is expected that the first query below can be analysed and planned,
> but the second can't?

> explain select x from (select row(42)) s(x);

> explain select count(x) from (select row(42)) s(x);
> ERROR:  record type has not been registered

Well, ideally that wouldn't happen, but making it go away isn't
all that trivial.  Try coercing the ROW() expression to some named
composite type.  For example, in the regression database this works:

regression=# select count(x) from (select row(42)::int4_tbl) s(x);count 
-------    1
(1 row)
        regards, tom lane