@@ -613,8 +613,13 @@ RumPageDeletePostingItem(Page page, OffsetNumber offset)
613
613
Assert (offset >=FirstOffsetNumber && offset <=maxoff );
614
614
615
615
if (offset != maxoff )
616
- memmove (RumDataPageGetItem (page ,offset ),RumDataPageGetItem (page ,offset + 1 ),
617
- sizeof (PostingItem )* (maxoff - offset ));
616
+ {
617
+ char * dstptr = RumDataPageGetItem (page ,offset ),
618
+ * sourceptr = RumDataPageGetItem (page ,offset + 1 );
619
+ memmove (dstptr ,sourceptr ,sizeof (PostingItem )* (maxoff - offset ));
620
+ /* Adjust pd_lower */
621
+ ((PageHeader )page )-> pd_lower = sourceptr - page ;
622
+ }
618
623
619
624
RumPageGetOpaque (page )-> maxoff -- ;
620
625
}
@@ -1090,11 +1095,21 @@ dataSplitPageInternal(RumBtree btree, Buffer lbuf, Buffer rbuf,
1090
1095
RumInitPage (rPage ,RumPageGetOpaque (newlPage )-> flags ,pageSize );
1091
1096
RumInitPage (newlPage ,RumPageGetOpaque (rPage )-> flags ,pageSize );
1092
1097
1093
- memcpy (RumDataPageGetItem (newlPage ,FirstOffsetNumber ),vector ,separator * sizeofitem );
1098
+ ptr = RumDataPageGetItem (newlPage ,FirstOffsetNumber );
1099
+ memcpy (ptr ,vector ,separator * sizeofitem );
1094
1100
RumPageGetOpaque (newlPage )-> maxoff = separator ;
1095
- memcpy (RumDataPageGetItem (rPage ,FirstOffsetNumber ),
1096
- vector + separator * sizeofitem , (maxoff - separator )* sizeofitem );
1101
+ /* Adjust pd_lower */
1102
+ ((PageHeader )newlPage )-> pd_lower = (ptr + separator * sizeofitem + 1 )-
1103
+ newlPage ;
1104
+
1105
+ ptr = RumDataPageGetItem (rPage ,FirstOffsetNumber );
1106
+ memcpy (ptr ,vector + separator * sizeofitem ,
1107
+ (maxoff - separator )* sizeofitem );
1097
1108
RumPageGetOpaque (rPage )-> maxoff = maxoff - separator ;
1109
+ /* Adjust pd_lower */
1110
+ ((PageHeader )rPage )-> pd_lower = (ptr +
1111
+ (maxoff - separator )* sizeofitem + 1 )-
1112
+ rPage ;
1098
1113
1099
1114
PostingItemSetBlockNumber (& (btree -> pitem ),BufferGetBlockNumber (lbuf ));
1100
1115
if (RumPageIsLeaf (newlPage ))