|From:||Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>|
|To:||Andreas Karlsson <andreas(at)proxel(dot)se>|
|Cc:||Andrew Gierth <andrew(at)tao11(dot)riddles(dot)org(dot)uk>, David Fetter <david(at)fetter(dot)org>, Thomas Munro <thomas(dot)munro(at)enterprisedb(dot)com>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org>|
|Subject:||Re: Early WIP/PoC for inlining CTEs|
|Views:||Raw Message | Whole Thread | Download mbox | Resend email|
Andreas Karlsson <andreas(at)proxel(dot)se> writes:
> [ inlining-ctes-v8.patch ]
I went ahead and pushed the stuff about QTW_EXAMINE_RTES_BEFORE/_AFTER,
because that seems like an independent change with other possible uses.
Attached is an updated version of the rest of the patch, with mostly
cosmetic changes. I've not touched the documentation, but I think this
is otherwise committable if we are satisfied with the semantics.
However ... after thinking about it more, I'm not really satisfied
with that. In particular I don't like the fact that by default this
will inline regardless of the number of references to the CTE. I doubt
that inlining when there are multiple references is so likely to be a
win as to justify it being the default, especially given that it flies
in the face of what our documentation has said for as long as we've
Therefore, I'm reversing my previous opinion that we should not have
an explicit NOT MATERIALIZED option. I think we should add that, and
the behavior ought to be:
* No option given: inline if there's exactly one reference.
* With MATERIALIZED: never inline.
* With NOT MATERIALIZED: inline regardless of the number of references.
(Obviously, we should not inline if there's RECURSIVE or the CTE
potentially has side-effects, regardless of the user option;
I don't think those cases are up for debate.)
I haven't done anything about that here, but the changes would be pretty
regards, tom lane
|Next Message||Merlin Moncure||2019-01-25 22:31:00||Re: crosstab/repivot...any interest?|
|Previous Message||Alvaro Herrera||2019-01-25 21:18:15||Re: ATTACH/DETACH PARTITION CONCURRENTLY|