Richard Guo <guofenglinux@gmail.com> writes:
> While fixing some performance issues caused by PHVs recently, it
> struck me again that we should be removing "no-op" PHVs whenever
> possible, because PHVs can be optimization barriers in several cases.
My immediate reaction is "how sure are you that they're no-ops"?
I recall that there are places where we intentionally insert PHVs
to preserve the separate identity of the contained expression
(so that, for example, it can be matched to a subquery output
later).
> I still do not have a good idea for ensuring that removing the PHV
> wrapper does not break the expression tree invariants. But maybe we
> can use a conservative approach: we only strip the PHV if the
> contained expression is known to be safe (for example, a simple Var).
Do we generate a PHV at all in that case? Seems like we could
deal with that by adding to the Var's varnullingrels instead of
making a wrapper node.
regards, tom lane