Re: Implement targetlist SRFs using ROWS FROM() (was Changed SRF in targetlist handling)

From: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
To: Andres Freund <andres(at)anarazel(dot)de>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: Implement targetlist SRFs using ROWS FROM() (was Changed SRF in targetlist handling)
Date: 2017-01-16 15:17:46
Message-ID: 20170116151746.smipap4c6pcxn24e@alvherre.pgsql
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Andres Freund wrote:

> That worked quite well. So we have a few questions, before I clean this
> up:
>
> - For now the node is named 'Srf' both internally and in explain - not
> sure if we want to make that something longer/easier to understand for
> others? Proposals? TargetFunctionScan? SetResult?
>
> - We could alternatively add all this into the Result node - it's not
> actually a lot of new code, and most of that is boilerplate stuff
> about adding a new node. I'm ok with both.

Hmm. I wonder if your stuff could be used as support code for
XMLTABLE[1]. Currently it has a bit of additional code of its own,
though admittedly it's very little code executor-side. Would you mind
sharing a patch, or more details on how it works?

[1] https://www.postgresql.org/message-id/CAFj8pRA_KEukOBXvS4V-imoEEsXu0pD0AsHV0-MwRFDRWte8Lg@mail.gmail.com

> - I continued with the division of Labor that Tom had set up, so we're
> creating one Srf node for each "nested" set of SRFs. We'd discussed
> nearby to change that for one node/path for all nested SRFs, partially
> because of costing. But I don't like the idea that much anymore. The
> implementation seems cleaner (and probably faster) this way, and I
> don't think nested targetlist SRFs are something worth optimizing
> for. Anybody wants to argue differently?

Nested targetlist SRFs make my head spin. I suppose they may have some
use, but where would you really want this:

alvherre=# select generate_series(1, generate_series(2, 4));
generate_series
─────────────────
1
2
1
2
3
1
2
3
4
(9 filas)

instead of the much more sensible

alvherre=# select i, j from generate_series(2, 4) i, generate_series(1, i) j;
i │ j
───┼───
2 │ 1
2 │ 2
3 │ 1
3 │ 2
3 │ 3
4 │ 1
4 │ 2
4 │ 3
4 │ 4
(9 filas)

? If supporting the former makes it harder to support/optimize more
reasonable cases, it seems fair game to leave them behind.

--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Fujii Masao 2017-01-16 15:33:20 Re: pg_basebackups and slots
Previous Message Magnus Hagander 2017-01-16 13:00:01 Re: pg_basebackups and slots