*** a/src/backend/access/rmgrdesc/gindesc.c
--- b/src/backend/access/rmgrdesc/gindesc.c
***************
*** 87,99 **** gin_desc(StringInfo buf, XLogReaderState *record)
  		case XLOG_GIN_INSERT:
  			{
  				ginxlogInsert *xlrec = (ginxlogInsert *) rec;
- 				char	   *payload = rec + sizeof(ginxlogInsert);
  
  				appendStringInfo(buf, "isdata: %c isleaf: %c",
  							  (xlrec->flags & GIN_INSERT_ISDATA) ? 'T' : 'F',
  							 (xlrec->flags & GIN_INSERT_ISLEAF) ? 'T' : 'F');
  				if (!(xlrec->flags & GIN_INSERT_ISLEAF))
  				{
  					BlockNumber leftChildBlkno;
  					BlockNumber rightChildBlkno;
  
--- 87,99 ----
  		case XLOG_GIN_INSERT:
  			{
  				ginxlogInsert *xlrec = (ginxlogInsert *) rec;
  
  				appendStringInfo(buf, "isdata: %c isleaf: %c",
  							  (xlrec->flags & GIN_INSERT_ISDATA) ? 'T' : 'F',
  							 (xlrec->flags & GIN_INSERT_ISLEAF) ? 'T' : 'F');
  				if (!(xlrec->flags & GIN_INSERT_ISLEAF))
  				{
+ 					char	   *payload = rec + sizeof(ginxlogInsert);
  					BlockNumber leftChildBlkno;
  					BlockNumber rightChildBlkno;
  
***************
*** 104,130 **** gin_desc(StringInfo buf, XLogReaderState *record)
  					appendStringInfo(buf, " children: %u/%u",
  									 leftChildBlkno, rightChildBlkno);
  				}
! 				if (!(xlrec->flags & GIN_INSERT_ISDATA))
! 					appendStringInfo(buf, " isdelete: %c",
! 					(((ginxlogInsertEntry *) payload)->isDelete) ? 'T' : 'F');
! 				else if (xlrec->flags & GIN_INSERT_ISLEAF)
! 				{
! 					ginxlogRecompressDataLeaf *insertData =
! 					(ginxlogRecompressDataLeaf *) payload;
! 
! 					if (XLogRecHasBlockImage(record, 0))
! 						appendStringInfoString(buf, " (full page image)");
! 					else
! 						desc_recompress_leaf(buf, insertData);
! 				}
  				else
  				{
! 					ginxlogInsertDataInternal *insertData = (ginxlogInsertDataInternal *) payload;
  
! 					appendStringInfo(buf, " pitem: %u-%u/%u",
! 							 PostingItemGetBlockNumber(&insertData->newitem),
! 						 ItemPointerGetBlockNumber(&insertData->newitem.key),
! 					   ItemPointerGetOffsetNumber(&insertData->newitem.key));
  				}
  			}
  			break;
--- 104,130 ----
  					appendStringInfo(buf, " children: %u/%u",
  									 leftChildBlkno, rightChildBlkno);
  				}
! 				if (XLogRecHasBlockImage(record, 0))
! 					appendStringInfoString(buf, " (full page image)");
  				else
  				{
! 					char	   *payload = XLogRecGetBlockData(record, 0, NULL);
  
! 					if (!(xlrec->flags & GIN_INSERT_ISDATA))
! 						appendStringInfo(buf, " isdelete: %c",
! 						 (((ginxlogInsertEntry *) payload)->isDelete) ? 'T' : 'F');
! 					else if (xlrec->flags & GIN_INSERT_ISLEAF)
! 						desc_recompress_leaf(buf, (ginxlogRecompressDataLeaf *) payload);
! 					else
! 					{
! 						ginxlogInsertDataInternal *insertData =
! 							(ginxlogInsertDataInternal *) payload;
! 
! 						appendStringInfo(buf, " pitem: %u-%u/%u",
! 										 PostingItemGetBlockNumber(&insertData->newitem),
! 										 ItemPointerGetBlockNumber(&insertData->newitem.key),
! 										 ItemPointerGetOffsetNumber(&insertData->newitem.key));
! 					}
  				}
  			}
  			break;
***************
*** 144,150 **** gin_desc(StringInfo buf, XLogReaderState *record)
  			break;
  		case XLOG_GIN_VACUUM_DATA_LEAF_PAGE:
  			{
! 				ginxlogVacuumDataLeafPage *xlrec = (ginxlogVacuumDataLeafPage *) rec;
  
  				if (XLogRecHasBlockImage(record, 0))
  					appendStringInfoString(buf, " (full page image)");
--- 144,151 ----
  			break;
  		case XLOG_GIN_VACUUM_DATA_LEAF_PAGE:
  			{
! 				ginxlogVacuumDataLeafPage *xlrec =
! 					(ginxlogVacuumDataLeafPage *) XLogRecGetBlockData(record, 0, NULL);
  
  				if (XLogRecHasBlockImage(record, 0))
  					appendStringInfoString(buf, " (full page image)");
