diff -ruN ../base/src/backend/access/nbtree/nbtree.c src/backend/access/nbtree/nbtree.c --- ../base/src/backend/access/nbtree/nbtree.c 2002-06-21 02:12:14.000000000 +0200 +++ src/backend/access/nbtree/nbtree.c 2002-08-30 11:44:35.000000000 +0200 @@ -615,6 +615,7 @@ { Buffer buf; BlockNumber lockedBlock = InvalidBlockNumber; + bool dirty = false; /* we have the buffer pinned and locked */ buf = so->btso_curbuf; @@ -662,14 +663,19 @@ LockBuffer(buf, BUFFER_LOCK_UNLOCK); LockBufferForCleanup(buf); lockedBlock = blkno; + dirty = false; } else { /* Okay to delete the item from the page */ _bt_itemdel(rel, buf, current); - /* Mark buffer dirty, but keep the lock and pin */ - WriteNoReleaseBuffer(buf); + if (!dirty) + { + /* Mark buffer dirty, but keep the lock and pin */ + WriteNoReleaseBuffer(buf); + dirty = true; + } tuples_removed += 1; }