Re: postgres_fdw bug in 9.6
Etsuro Fujita <fujita.etsuro@lab.ntt.co.jp>
From: Etsuro Fujita <fujita.etsuro@lab.ntt.co.jp>
To: Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>
Cc: Jeff Janes <jeff.janes@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>,
Robert Haas <robertmhaas@gmail.com>,
pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2017-01-06T13:01:04Z
Lists: pgsql-hackers
Attachments
- epqpath-for-foreignjoin-2.patch (text/x-patch) patch
- (unnamed) (text/plain)
On 2017/01/05 12:10, Etsuro Fujita wrote: > On 2016/12/28 17:34, Ashutosh Bapat wrote: >> Hmm. If I understand the patch correctly, it does not return any path >> when merge join is allowed and there are merge clauses but no hash >> clauses. In this case we will not create a foreign join path, loosing >> some optimization. If we remove GetExistingLocalJoinPath, which >> returns a path in those cases as well, we have a regression in >> performance. > Ok, will revise, but as I mentioned upthread, I'm not sure it's a good > idea to search the pathlist to get a merge join even in this case. I'd > vote for creating a merge join path from the inner/outer paths in this > case as well. Done. Attached is the new version of the patch. * I'm still not sure the search approach is the right way to go, so I modified CreateLocalJoinPath so that it creates a mergejoin path that explicitly sorts both the outer and inner relations as in sort_inner_and_outer, by using the information saved in that function. I think we could try to create a sort-free mergejoin as in match_unsorted_outer, but I'm not sure it's worth complicating the code. * I modified CreateLocalJoinPath so that it handles the cheapest-total paths for the outer/inner relations that are parameterized if possible. * I adjusted the code and revised some comments. As I said upthread, we could skip costing for a local join path in CreateLocalJoinPath, for efficiency, but I'm not sure we should do that. Best regards, Etsuro Fujita
Commits
-
Fix test case for 'outer pathkeys do not match mergeclauses' fix.
- d397f558d555 9.6.7 landed
- 92123c6ea212 10.2 landed
- 99f6a17dd62a 11.0 landed
-
postgres_fdw: Avoid 'outer pathkeys do not match mergeclauses' error.
- 4a81c022975e 9.6.7 landed
- 3f05a30b50a7 10.2 landed
- 4bbf6edfbd5d 11.0 landed
-
postgres_fdw: Consider foreign joining and foreign sorting together.
- aa09cd242fa7 9.6.0 cited
-
Allow foreign and custom joins to handle EvalPlanQual rechecks.
- 385f337c9f39 9.6.0 cited
-
Allow FDWs to push down quals without breaking EvalPlanQual rechecks.
- 5fc4c26db512 9.6.0 cited