From: | Bruce Momjian <bruce(at)momjian(dot)us> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>, Guyren Howe <guyren(at)gmail(dot)com>, Pg Docs <pgsql-docs(at)lists(dot)postgresql(dot)org> |
Subject: | Re: Please provide examples of rows from |
Date: | 2020-09-20 01:38:46 |
Message-ID: | 20200920013846.GC22746@momjian.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-docs |
On Sat, Sep 19, 2020 at 08:49:53PM -0400, Tom Lane wrote:
> Bruce Momjian <bruce(at)momjian(dot)us> writes:
> > test=> \df pg_get_keywords
> > List of functions
> > Schema | Name | Result data type | Argument data types | Type
> > ------------+-----------------+------------------+-----------------------------------------------------------------------------------------------+------
> > pg_catalog | pg_get_keywords | SETOF record | OUT word text, OUT catcode "char", OUT barelabel boolean, OUT catdesc text, OUT baredesc text | func
> > (1 row)
>
> > test=> select * from pg_get_keywords() AS f(word text);
> > --> ERROR: a column definition list is only allowed for functions returning "record"
> > LINE 1: select * from pg_get_keywords() AS f(word text);
>
> Yeah, this error message needs some help. With a function having
> multiple OUT parameters, the prorettype is indeed "record", but
> the specific record type is implied by the OUT parameters so you
> do not need to (and can't) specify it in the query.
>
> The point of the AS feature is to allow specifying the concrete
> record type for record-returning functions that don't have a
> predefined result record type, like dblink().
>
> I think this error text was written before we had multiple OUT
> parameters, so it was okay at the time; but now it needs to be
> more precise.
OK, thanks. It seems this area needs some work, in general.
Unfortunately I don't see any system functions that return RECORD and
don't use OUT parameters, except dblink(), json(b)_to_record(),
json(b)_to_recordset(), and record_*. This is going to be hard to
illustrate. :-( I did get this working:
test=> select * FROM json_to_record('{"a": 1, "b": 2}'::json) as (b
text);
b
---
2
but doing this to illustrate ROWS FROM is going to be complex.
--
Bruce Momjian <bruce(at)momjian(dot)us> https://momjian.us
EnterpriseDB https://enterprisedb.com
The usefulness of a cup is in its emptiness, Bruce Lee
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2020-09-20 14:57:14 | Re: Please provide examples of rows from |
Previous Message | Tom Lane | 2020-09-20 00:49:53 | Re: Please provide examples of rows from |