On Mon, Apr 6, 2020 at 5:22 PM James Coleman <jtc...@gmail.com> wrote: > > On Mon, Apr 6, 2020 at 5:20 PM James Coleman <jtc...@gmail.com> wrote: > > > > On Mon, Apr 6, 2020 at 5:12 PM Tomas Vondra > > <tomas.von...@2ndquadrant.com> wrote: > > > > > > On Mon, Apr 06, 2020 at 04:54:38PM -0400, Alvaro Herrera wrote: > > > >On 2020-Apr-06, Tom Lane wrote: > > > > > > > >> Locally, things pass without force_parallel_mode, but turning it on > > > >> produces failures that look similar to rhinoceros's (didn't examine > > > >> other BF members). > > > > > > > >FWIW I looked at the eight failures there were about fifteen minutes ago > > > >and they were all identical. I can confirm that, in my laptop, the > > > >tests work without that GUC, and fail in exactly that way with it. > > > > > > > > > > Yes, there's a thinko in show_incremental_sort_info() and it returns too > > > soon. I'll push a fix in a minute. > > > > I'm stepping through this in a debugger; is what you're considering > > that the for loop through the workers is off by one? > > Oh, nevermind, misread that. > > Looks like if the leader doesn't participate, then we don't show > details for workers. > > Tomas: Do you already have a patch? If not, I can work one up.
Well, already have it, so I'll send it just in case. James
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 62c86ecdc5..c31f3e0987 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -2880,19 +2880,22 @@ show_incremental_sort_info(IncrementalSortState *incrsortstate, fullsortGroupInfo = &incrsortstate->incsort_info.fullsortGroupInfo; - if (!(es->analyze && fullsortGroupInfo->groupCount > 0)) + if (!es->analyze) return; - show_incremental_sort_group_info(fullsortGroupInfo, "Full-sort", true, es); - prefixsortGroupInfo = &incrsortstate->incsort_info.prefixsortGroupInfo; - if (prefixsortGroupInfo->groupCount > 0) + if (fullsortGroupInfo->groupCount > 0) { + show_incremental_sort_group_info(fullsortGroupInfo, "Full-sort", true, es); + prefixsortGroupInfo = &incrsortstate->incsort_info.prefixsortGroupInfo; + if (prefixsortGroupInfo->groupCount > 0) + { + if (es->format == EXPLAIN_FORMAT_TEXT) + appendStringInfo(es->str, " "); + show_incremental_sort_group_info(prefixsortGroupInfo, "Presorted", false, es); + } if (es->format == EXPLAIN_FORMAT_TEXT) - appendStringInfo(es->str, " "); - show_incremental_sort_group_info(prefixsortGroupInfo, "Presorted", false, es); + appendStringInfo(es->str, "\n"); } - if (es->format == EXPLAIN_FORMAT_TEXT) - appendStringInfo(es->str, "\n"); if (incrsortstate->shared_info != NULL) { diff --git a/src/test/regress/sql/incremental_sort.sql b/src/test/regress/sql/incremental_sort.sql index 3b359efa29..c46443358a 100644 --- a/src/test/regress/sql/incremental_sort.sql +++ b/src/test/regress/sql/incremental_sort.sql @@ -1,3 +1,5 @@ +set force_parallel_mode = regress; + -- When we have to sort the entire table, incremental sort will -- be slower than plain sort, so it should not be used. explain (costs off)