That avoids having to care about the lifetime of the
 HeapTupleHeaderData passed to ExecStore[Buffer]HeapTuple(). That
 doesn't make a huge difference for a plain HeapTupleTableSlot, but for
 BufferHeapTupleTableSlot it can be a significant advantage, avoiding
 the need to materialize slots where it's inconvenient to provide a
 HeapTupleData with appropriate lifetime to point to the on-disk tuple. 
 It's quite possible that we'll want to add support functions for
 constructing HeapTuples using that embedded HeapTupleData, but for now
 callers do so themselves. 
 Author: Andres Freund
 Discussion: https://postgr.es/m/
20180703070645.wchpu5muyto5n647@alap3.anarazel.de  
   
           
  #include "access/htup.h"
  #include "access/tupdesc.h"
 +#include "access/htup_details.h"
  #include "storage/buf.h"
  
  /*----------
      HeapTuple   tuple;      /* physical tuple */
  #define FIELDNO_HEAPTUPLETABLESLOT_OFF 2
     uint32      off;        /* saved state for slot_deform_heap_tuple */
 +   HeapTupleData tupdata;  /* optional workspace for storing tuple */
  } HeapTupleTableSlot;
  
  /* heap tuple residing in a buffer */