bool        markpos_eof;    /* saved "eof_reached" */
 
    /*
-    * The sortKeys variable is used by every case other than the hash index
-    * case; it is set by tuplesort_begin_xxx.  tupDesc is only used by the
-    * MinimalTuple and CLUSTER routines, though.
+    * The sortKeys variable is used by every case other than the datum and
+    * hash index cases; it is set by tuplesort_begin_xxx.  tupDesc is only
+    * used by the MinimalTuple and CLUSTER routines, though.
     */
    TupleDesc   tupDesc;
    SortSupport sortKeys;       /* array of length nKeys */
                             RelationGetDescr(state->indexRel),
                             &stup.isnull1);
 
-   if (!state->sortKeys->abbrev_converter || stup.isnull1)
+   if (!state->sortKeys || !state->sortKeys->abbrev_converter || stup.isnull1)
    {
        /*
         * Store ordinary Datum representation, or NULL value.  If there is a
        return;
    }
 
-   if (state->sortKeys->abbrev_converter)
+   if (state->sortKeys != NULL && state->sortKeys->abbrev_converter != NULL)
    {
        /*
         * If there are multiple runs to be merged, when we go to read back