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 1lMtjz-0005or-Mn for pgsql-sql@arkaria.postgresql.org; Thu, 18 Mar 2021 14:35:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lMtjx-0004ND-SQ for pgsql-sql@arkaria.postgresql.org; Thu, 18 Mar 2021 14:35:09 +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 1lMths-0001he-LZ for pgsql-sql@lists.postgresql.org; Thu, 18 Mar 2021 14:33:00 +0000 Received: from hub.ringways.co.uk ([88.211.105.30] helo=ringways.co.uk) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lMthq-000839-Fu for pgsql-sql@lists.postgresql.org; Thu, 18 Mar 2021 14:32:59 +0000 Received: from rwsys1.ringways.co.uk ([10.1.1.105] helo=eddie.ringways.co.uk) by ringways.co.uk with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94) (envelope-from ) id 1lMthk-0007B3-7B for pgsql-sql@lists.postgresql.org; Thu, 18 Mar 2021 14:32:53 +0000 Subject: Re: select into composite type / return To: pgsql-sql@lists.postgresql.org References: <39dcfab9-4eb2-382b-9186-baf722ca56a0@ringways.co.uk> <3523853.1616002010@sss.pgh.pa.us> <9eb42b06-9cfa-1e4b-e42b-6f64e99675a5@ringways.co.uk> <7af5d693-a6a3-d3d4-050a-0898aad8bd77@ringways.co.uk> <3718235.1616077713@sss.pgh.pa.us> From: Gary Stainburn Message-ID: Date: Thu, 18 Mar 2021 14:32:50 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <3718235.1616077713@sss.pgh.pa.us> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-Spam-Score: -48.4 (------------------------------------------------) X-Spam-Report: Spam detection software, running on the system "ollie2.ringways.co.uk", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see Gary Stainburn for details. Content preview: On 18/03/2021 14:28, Tom Lane wrote: > Beware --- what that actually does is expand into > SELECT id, (do_breakdown(id)).f1, (do_breakdown(id)).f2, ... > > so that the function will be invoked N times if it produces N columns. > > What you generally want to do is invoke the function as a lateral FROM > item: > > SELECT id, f.* FROM table AS t, LATERAL do_breakdown(t.id) AS f; > > regards, tom lane Thanks for the info Tom, I can see how that would be quite a performance hit, not to mention adverse effects if these functions start doing updates. [...] Content analysis details: (-48.4 points, 15.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -50 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] 2.0 FLOWED Conten Type format=flowed appears in the new SPAMS 0.1 SCORE_RCPTS Adding score for each recipient -0.6 AWL AWL: Adjusted score from AWL reputation of From: address 1.0 MISSING_FROM Missing From: header -0.0 NICE_REPLY_A Looks like a legit reply (A) 1.0 RING_SAFE No description available. List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On 18/03/2021 14:28, Tom Lane wrote: > Beware --- what that actually does is expand into > SELECT id, (do_breakdown(id)).f1, (do_breakdown(id)).f2, ... > > so that the function will be invoked N times if it produces N columns. > > What you generally want to do is invoke the function as a lateral FROM > item: > > SELECT id, f.* FROM table AS t, LATERAL do_breakdown(t.id) AS f; > > regards, tom lane Thanks for the info Tom, I can see how that would be quite a performance hit, not to mention adverse effects if these functions start doing updates. gary=# SELECT id, f.* FROM sessions AS t, LATERAL do_breakdown(t.id) AS f;  id |  f1   |  f2   |  f3   |  f4   |  f5   |  f6 ----+-------+-------+-------+-------+-------+-------   1 |  1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00   2 | 11.00 | 12.00 | 13.00 | 14.00 | 15.00 | 16.00   3 | 21.00 | 22.00 | 23.00 | 24.00 | 25.00 | 26.00 (3 rows) gary=#