On Fri, Feb 20, 2015 at 11:58 AM, Tomas Vondra <tomas.von...@2ndquadrant.com> wrote: > This seems to happen because ordered_set_startup() calls > tuplesort_begin_datum() when (use_tuples == true), which only sets > 'onlyKey' and leaves (sortKeys == NULL). So 'mergeruns' fails because it > does not expect that.
Oops. You're right. Attached patch fixes the issue, by making tuplesort_begin_datum() consistent with other comparable routines for other tuple cases. I think it makes sense to have the 'sortKeys' field always set, and the 'onlyKey' field also set when that additional optimization makes sense. That was what I understood the API to be, so arguably this is a pre-existing issue with tuplesort_begin_datum(). Thanks for the report! -- Peter Geoghegan
diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c index b8494a2..3074e8e 100644 --- a/src/backend/utils/sort/tuplesort.c +++ b/src/backend/utils/sort/tuplesort.c @@ -905,18 +905,21 @@ tuplesort_begin_datum(Oid datumType, Oid sortOperator, Oid sortCollation, state->datumType = datumType; /* Prepare SortSupport data */ - state->onlyKey = (SortSupport) palloc0(sizeof(SortSupportData)); + state->sortKeys = (SortSupport) palloc0(sizeof(SortSupportData)); - state->onlyKey->ssup_cxt = CurrentMemoryContext; - state->onlyKey->ssup_collation = sortCollation; - state->onlyKey->ssup_nulls_first = nullsFirstFlag; + state->sortKeys->ssup_cxt = CurrentMemoryContext; + state->sortKeys->ssup_collation = sortCollation; + state->sortKeys->ssup_nulls_first = nullsFirstFlag; /* * Conversion to abbreviated representation infeasible in the Datum case. * It must be possible to subsequently fetch original datum values within * tuplesort_getdatum(), which would require special-case preservation of * original values. */ - state->onlyKey->abbreviate = false; + state->sortKeys->abbreviate = false; + + /* "onlyKey" optimization can always be used */ + state->onlyKey = state->sortKeys; PrepareSortSupportFromOrderingOp(sortOperator, state->onlyKey);
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers