Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kJoKB-0003Db-At for pgsql-docs@arkaria.postgresql.org; Sun, 20 Sep 2020 01:39:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kJoJc-0000mO-My for pgsql-docs@arkaria.postgresql.org; Sun, 20 Sep 2020 01:38:56 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kJoJc-0000mH-HN for pgsql-docs@lists.postgresql.org; Sun, 20 Sep 2020 01:38:56 +0000 Received: from momjian.us ([72.94.173.45]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kJoJV-0007FW-M6 for pgsql-docs@lists.postgresql.org; Sun, 20 Sep 2020 01:38:55 +0000 Received: from bruce by momjian.us with local (Exim 4.92) (envelope-from ) id 1kJoJS-0005zV-T3; Sat, 19 Sep 2020 21:38:46 -0400 Date: Sat, 19 Sep 2020 21:38:46 -0400 From: Bruce Momjian To: Tom Lane Cc: "David G. Johnston" , Guyren Howe , Pg Docs Subject: Re: Please provide examples of rows from Message-ID: <20200920013846.GC22746@momjian.us> References: <158638264419.662.2482095087061084020@wrigleys.postgresql.org> <20200904014618.GB13932@momjian.us> <20200920003910.GA22746@momjian.us> <798909.1600562993@sss.pgh.pa.us> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <798909.1600562993@sss.pgh.pa.us> User-Agent: Mutt/1.10.1 (2018-07-13) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk On Sat, Sep 19, 2020 at 08:49:53PM -0400, Tom Lane wrote: > Bruce Momjian 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 https://momjian.us EnterpriseDB https://enterprisedb.com The usefulness of a cup is in its emptiness, Bruce Lee