On Mon, Apr 6, 2020 at 5:22 PM James Coleman <[email protected]> wrote:
>
> On Mon, Apr 6, 2020 at 5:20 PM James Coleman <[email protected]> wrote:
> >
> > On Mon, Apr 6, 2020 at 5:12 PM Tomas Vondra
> > <[email protected]> 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)