Re: a column definition list is required for functions returning "record"

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
Cc: Jim Nasby <Jim(dot)Nasby(at)bluetreble(dot)com>, Alexander Farber <alexander(dot)farber(at)gmail(dot)com>, pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: a column definition list is required for functions returning "record"
Date: 2016-08-29 11:28:11
Message-ID: 26964.1472470091@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> writes:
> 2016-08-29 1:59 GMT+02:00 Jim Nasby <Jim(dot)Nasby(at)bluetreble(dot)com>:
>> It would be nice if there was a way to pass dynamically formed records
>> around, similar to how you can pass the results of row() around. Someone
>> else has actually be asking about this at https://github.com/decibel/pg_
>> lambda/issues/1.

> Probably there is a space to be PLpgSQL more flexible - but there are
> limits - PLpgSQL is black box for SQL engine, and when output is any record
> type, then SQL engine knows zero about returning data structure in
> preprocessing time.

Exactly. You can pass anonymous record types around today, as long as you
don't do anything that requires knowing what their contents are, either in
the function or in the calling query:

regression=# create function foor(int,int) returns record language sql as $$ select row($1,$2); $$;
CREATE FUNCTION
regression=# select foor(23,45);
foor
---------
(23,45)
(1 row)

regression=# create function plr(int,int) returns record language plpgsql as $$begin return row($1,$2); end; $$;
CREATE FUNCTION
regression=# select plr(23,45);
plr
---------
(23,45)
(1 row)

What you can't do is, eg,

regression=# select * from plr(23,45);
ERROR: a column definition list is required for functions returning "record"
LINE 1: select * from plr(23,45);
^

because the parser has no basis on which to expand the "*". The column
definition list is exactly a hack for telling it that.

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message hubert depesz lubaczewski 2016-08-29 11:38:03 Any work on better parallelization of pg_dump?
Previous Message Alexander Farber 2016-08-29 08:15:17 Re: a column definition list is required for functions returning "record"