diff --git a/src/backend/access/brin/brin_pageops.c b/src/backend/access/brin/brin_pageops.c
index 80f803e..04ad804 100644
*** a/src/backend/access/brin/brin_pageops.c
--- b/src/backend/access/brin/brin_pageops.c
*************** brin_doupdate(Relation idxrel, BlockNumb
*** 243,249 ****
  		if (extended)
  			brin_page_init(BufferGetPage(newbuf), BRIN_PAGETYPE_REGULAR);
  
! 		PageIndexTupleDeleteNoCompact(oldpage, oldoff);
  		newoff = PageAddItem(newpage, (Item) newtup, newsz,
  							 InvalidOffsetNumber, false, false);
  		if (newoff == InvalidOffsetNumber)
--- 243,249 ----
  		if (extended)
  			brin_page_init(BufferGetPage(newbuf), BRIN_PAGETYPE_REGULAR);
  
! 		PageIndexTupleDeleteNoCompact(idxrel, oldbuf, oldpage, oldoff);
  		newoff = PageAddItem(newpage, (Item) newtup, newsz,
  							 InvalidOffsetNumber, false, false);
  		if (newoff == InvalidOffsetNumber)
diff --git a/src/backend/access/brin/brin_revmap.c b/src/backend/access/brin/brin_revmap.c
index 22f2076..4d5dad3 100644
*** a/src/backend/access/brin/brin_revmap.c
--- b/src/backend/access/brin/brin_revmap.c
*************** brinRevmapDesummarizeRange(Relation idxr
*** 409,415 ****
  	ItemPointerSetInvalid(&invalidIptr);
  	brinSetHeapBlockItemptr(revmapBuf, revmap->rm_pagesPerRange, heapBlk,
  							invalidIptr);
! 	PageIndexTupleDeleteNoCompact(regPg, regOffset);
  	/* XXX record free space in FSM? */
  
  	MarkBufferDirty(regBuf);
--- 409,415 ----
  	ItemPointerSetInvalid(&invalidIptr);
  	brinSetHeapBlockItemptr(revmapBuf, revmap->rm_pagesPerRange, heapBlk,
  							invalidIptr);
! 	PageIndexTupleDeleteNoCompact(idxrel, regBuf, regPg, regOffset);
  	/* XXX record free space in FSM? */
  
  	MarkBufferDirty(regBuf);
diff --git a/src/backend/access/brin/brin_xlog.c b/src/backend/access/brin/brin_xlog.c
index 60daa54..c8cc9f8 100644
*** a/src/backend/access/brin/brin_xlog.c
--- b/src/backend/access/brin/brin_xlog.c
*************** brin_xlog_update(XLogReaderState *record
*** 150,156 ****
  
  		offnum = xlrec->oldOffnum;
  
! 		PageIndexTupleDeleteNoCompact(page, offnum);
  
  		PageSetLSN(page, lsn);
  		MarkBufferDirty(buffer);
--- 150,156 ----
  
  		offnum = xlrec->oldOffnum;
  
! 		PageIndexTupleDeleteNoCompact(NULL, buffer, page, offnum);
  
  		PageSetLSN(page, lsn);
  		MarkBufferDirty(buffer);
*************** brin_xlog_desummarize_page(XLogReaderSta
*** 285,291 ****
  	{
  		Page		regPg = BufferGetPage(buffer);
  
! 		PageIndexTupleDeleteNoCompact(regPg, xlrec->regOffset);
  
  		PageSetLSN(regPg, lsn);
  		MarkBufferDirty(buffer);
--- 285,291 ----
  	{
  		Page		regPg = BufferGetPage(buffer);
  
! 		PageIndexTupleDeleteNoCompact(NULL, buffer, regPg, xlrec->regOffset);
  
  		PageSetLSN(regPg, lsn);
  		MarkBufferDirty(buffer);
diff --git a/src/backend/storage/page/bufpage.c b/src/backend/storage/page/bufpage.c
index 41642eb..20c0ada 100644
*** a/src/backend/storage/page/bufpage.c
--- b/src/backend/storage/page/bufpage.c
***************
*** 14,25 ****
--- 14,29 ----
   */
  #include "postgres.h"
  
+ #include<unistd.h>
+ 
  #include "access/htup_details.h"
  #include "access/itup.h"
  #include "access/xlog.h"
+ #include "storage/bufmgr.h"
  #include "storage/checksum.h"
  #include "utils/memdebug.h"
  #include "utils/memutils.h"
+ #include "utils/rel.h"
  
  
  /* GUC variable */
*************** PageIndexMultiDelete(Page page, OffsetNu
*** 955,961 ****
   * remain unchanged, and are willing to allow unused line pointers instead.
   */
  void
! PageIndexTupleDeleteNoCompact(Page page, OffsetNumber offnum)
  {
  	PageHeader	phdr = (PageHeader) page;
  	char	   *addr;
--- 959,966 ----
   * remain unchanged, and are willing to allow unused line pointers instead.
   */
  void
! PageIndexTupleDeleteNoCompact(Relation rel, Buffer buf,
! 							  Page page, OffsetNumber offnum)
  {
  	PageHeader	phdr = (PageHeader) page;
  	char	   *addr;
*************** PageIndexTupleDeleteNoCompact(Page page,
*** 978,983 ****
--- 983,996 ----
  						phdr->pd_lower, phdr->pd_upper, phdr->pd_special)));
  
  	nline = PageGetMaxOffsetNumber(page);
+ 
+ 	Assert(page == BufferGetPage(buf));
+ 
+ 	elog(LOG, "deleting tuple %d (of %d) in rel %s page %u",
+ 		 offnum, nline,
+ 		 rel ? RelationGetRelationName(rel) : "(unknown)",
+ 		 BufferGetBlockNumber(buf));
+ 
  	if ((int) offnum <= 0 || (int) offnum > nline)
  		elog(ERROR, "invalid index offnum: %u", offnum);
  
diff --git a/src/include/storage/bufpage.h b/src/include/storage/bufpage.h
index 50c72a3..656be22 100644
*** a/src/include/storage/bufpage.h
--- b/src/include/storage/bufpage.h
***************
*** 16,23 ****
--- 16,25 ----
  
  #include "access/xlogdefs.h"
  #include "storage/block.h"
+ #include "storage/buf.h"
  #include "storage/item.h"
  #include "storage/off.h"
+ #include "utils/relcache.h"
  
  /*
   * A postgres disk page is an abstraction layered on top of a postgres
*************** extern Size PageGetExactFreeSpace(Page p
*** 429,435 ****
  extern Size PageGetHeapFreeSpace(Page page);
  extern void PageIndexTupleDelete(Page page, OffsetNumber offset);
  extern void PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems);
! extern void PageIndexTupleDeleteNoCompact(Page page, OffsetNumber offset);
  extern bool PageIndexTupleOverwrite(Page page, OffsetNumber offnum,
  						Item newtup, Size newsize);
  extern char *PageSetChecksumCopy(Page page, BlockNumber blkno);
--- 431,438 ----
  extern Size PageGetHeapFreeSpace(Page page);
  extern void PageIndexTupleDelete(Page page, OffsetNumber offset);
  extern void PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems);
! extern void PageIndexTupleDeleteNoCompact(Relation rel, Buffer buf,
! 										  Page page, OffsetNumber offset);
  extern bool PageIndexTupleOverwrite(Page page, OffsetNumber offnum,
  						Item newtup, Size newsize);
  extern char *PageSetChecksumCopy(Page page, BlockNumber blkno);
