From: | Michael Fuhr <mike(at)fuhr(dot)org> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Thomas Hallgren <thhal(at)mailblocks(dot)com>, pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: [GENERAL] Returning a RECORD, not SETOF RECORD |
Date: | 2005-04-29 17:21:35 |
Message-ID: | 20050429172135.GA2695@winnie.fuhr.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general pgsql-hackers |
On Fri, Apr 29, 2005 at 10:36:05AM -0400, Tom Lane wrote:
>
> regression=# select (xyz(unique1,unique2)).* from tenk1 limit 5;
This is a little off topic, but I've noticed that the above invokes
the function once per output column:
CREATE FUNCTION xyz(INOUT x integer, INOUT y integer, OUT z integer) AS $$
BEGIN
RAISE INFO 'calling xyz';
z := x + y;
END;
$$ LANGUAGE plpgsql IMMUTABLE;
SELECT xyz(1,2);
INFO: calling xyz
xyz
---------
(1,2,3)
(1 row)
SELECT (xyz(1,2)).*;
INFO: calling xyz
INFO: calling xyz
INFO: calling xyz
x | y | z
---+---+---
1 | 2 | 3
(1 row)
Is that because the splat causes the query to be expanded into
"SELECT (xyz(1,2)).x, (xyz(1,2)).y, (xyz(1,2)).z"? Is it possible
or desirable to optimize that into a single call, at least if the
function were stable or immutable?
--
Michael Fuhr
http://www.fuhr.org/~mfuhr/
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2005-04-29 17:23:53 | Re: Composite types as columns used in production? |
Previous Message | Chris Browne | 2005-04-29 16:59:14 | Slowness of Big Graphical Arrays |
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2005-04-29 17:34:49 | Re: [GENERAL] Returning a RECORD, not SETOF RECORD |
Previous Message | Marc G. Fournier | 2005-04-29 16:34:56 | Re: Feature freeze date for 8.1 |