Re: [HACKERS] Removing [Merge]Append nodes which contain a single subpath - Mailing list pgsql-hackers
From | David Rowley |
---|---|
Subject | Re: [HACKERS] Removing [Merge]Append nodes which contain a single subpath |
Date | |
Msg-id | CAKJS1f9zzaBro82NTWEzKQeUfCunzv5KW4aEbLUVhG0rkQJMJg@mail.gmail.com Whole thread Raw |
In response to | Re: [HACKERS] Removing [Merge]Append nodes which contain a single subpath (Tom Lane <tgl@sss.pgh.pa.us>) |
Responses |
Re: [HACKERS] Removing [Merge]Append nodes which contain a single subpath
Re: [HACKERS] Removing [Merge]Append nodes which contain a singlesubpath |
List | pgsql-hackers |
On 16 March 2018 at 04:01, Tom Lane <tgl@sss.pgh.pa.us> wrote: > I hadn't been paying much attention to this thread, but I've now taken > a quick look at the 2018-02-19 patch, and I've got to say I do not like > it much. The changes in createplan.c in particular seem like hack-and- > slash rather than anything principled or maintainable. Thanks for looking at this. I didn't manage to discover any other working solutions to when the Vars can be replaced. If we don't do this in createplan.c then it's going to cause problems in places such as apply_pathtarget_labeling_to_tlist, which is well before setrefs.c gets hold of the plan. > The core issue here is that Paths involving the appendrel and higher > will contain Vars referencing the appendrel's varno, whereas the child > is set up to emit Vars containing its own varno, and somewhere we've got > to match those up. I don't think though that this problem is exactly > specific to single-member Appends, and so I would rather we not invent a > solution that's specific to that. A nearly identical issue is getting > rid of no-op SubqueryScan nodes. I've long wished we could simply not > emit those in the first place, but it's really hard to do because of > the fact that Vars inside the subquery have different varnos from those > outside. (I've toyed with the idea of globally flattening the rangetable > before we start planning, not at the end, but haven't made it happen yet; > and anyway that would be only one step towards such a goal.) I'm not quite sure why you think the solution I came up with is specific to single-member Appends. The solution merely uses single-member Append paths as a proxy path for the solution which I've tried to make generic to any node type. For example, the patch also resolves the issue for MergeAppend, so certainly nothing in there is specific to single-member Appends. I could have made the proxy any other path type, it's just that you had suggested Append would be better than inventing ProxyPath, which is what I originally proposed. > It might be worth looking at whether we couldn't fix the single-member- > Append issue the same way we fix no-op SubqueryScans, ie let setrefs.c > get rid of them. That's not the most beautiful solution perhaps, but > it'd be very localized and low-risk. It might be possible, but wouldn't that only solve 1 out of 2 problems. The problem of the planner not generating the most optimal plan is ignored with this. For example, it does not make much sense to bolt a Materialize node on top of an IndexScan node in order to provide the IndexScan with mark/restore capabilities... They already allow that. > In general setrefs.c is the right place to deal with variable-matching > issues. So even if you don't like that specific idea, it'd probably be > worth thinking about handling this by recording instructions telling > setrefs what to do, instead of actually doing it at earlier stages. From what I can see, setrefs.c is too late. ERRORs are generated before setrefs.c gets hold of the plan if we don't replace Vars. I'm not opposed to finding a better way to do this. -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
pgsql-hackers by date: