diff --git a/src/backend/access/gin/gindatapage.c b/src/backend/access/gin/gindatapage.c
index 5b7c49654c65d95626b2edd84d8b673810165bd5..76e0cb3e19f7bdea54edb9e468efea1d902b8940 100644
--- a/src/backend/access/gin/gindatapage.c
+++ b/src/backend/access/gin/gindatapage.c
@@ -641,20 +641,24 @@ dataPlaceToPageLeaf(GinBtree btree, Buffer buf, GinBtreeStack *stack,
 			{
 				lastleftinfo = dlist_container(leafSegmentInfo, node, leaf->lastleft);
 
-				segsize = SizeOfGinPostingList(lastleftinfo->seg);
-				if (append)
+				/* ignore deleted segments */
+				if (lastleftinfo->action != GIN_SEGMENT_DELETE)
 				{
-					if ((leaf->lsize - segsize) - (leaf->lsize - segsize) < BLCKSZ / 4)
-						break;
+					segsize = SizeOfGinPostingList(lastleftinfo->seg);
+					if (append)
+					{
+						if ((leaf->lsize - segsize) - (leaf->lsize - segsize) < BLCKSZ / 4)
+							break;
+					}
+					else
+					{
+						if ((leaf->lsize - segsize) - (leaf->rsize + segsize) < 0)
+							break;
+					}
+
+					leaf->lsize -= segsize;
+					leaf->rsize += segsize;
 				}
-				else
-				{
-					if ((leaf->lsize - segsize) - (leaf->rsize + segsize) < 0)
-						break;
-				}
-
-				leaf->lsize -= segsize;
-				leaf->rsize += segsize;
 				leaf->lastleft = dlist_prev_node(&leaf->segments, leaf->lastleft);
 			}
 		}