Skip to content

Commit fa41cf8

Browse files
Avoid misinterpreting GiST pages in pageinspect.
GistPageSetDeleted() sets pd_lower when deleting a page, and sets the page contents to a GISTDeletedPageContents. Avoid treating deleted GiST pages as regular slotted pages within pageinspect. Oversight in commit 756ab29. Author: Andrey Borodin <x4mmm@yandex-team.ru>
1 parent 7cde6b1 commit fa41cf8

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

contrib/pageinspect/gistfuncs.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ gist_page_items_bytea(PG_FUNCTION_ARGS)
103103
MemoryContext oldcontext;
104104
Page page;
105105
OffsetNumber offset;
106+
OffsetNumber maxoff = InvalidOffsetNumber;
106107

107108
if (!superuser())
108109
ereport(ERROR,
@@ -135,11 +136,14 @@ gist_page_items_bytea(PG_FUNCTION_ARGS)
135136

136137
page = get_page_from_raw(raw_page);
137138

139+
/* Avoid bogus PageGetMaxOffsetNumber() call with deleted pages */
138140
if (GistPageIsDeleted(page))
139141
elog(NOTICE, "page is deleted");
142+
else
143+
maxoff = PageGetMaxOffsetNumber(page);
140144

141145
for (offset = FirstOffsetNumber;
142-
offset <= PageGetMaxOffsetNumber(page);
146+
offset <= maxoff;
143147
offset++)
144148
{
145149
Datum values[4];
@@ -187,6 +191,7 @@ gist_page_items(PG_FUNCTION_ARGS)
187191
MemoryContext oldcontext;
188192
Page page;
189193
OffsetNumber offset;
194+
OffsetNumber maxoff = InvalidOffsetNumber;
190195

191196
if (!superuser())
192197
ereport(ERROR,
@@ -222,11 +227,14 @@ gist_page_items(PG_FUNCTION_ARGS)
222227

223228
page = get_page_from_raw(raw_page);
224229

230+
/* Avoid bogus PageGetMaxOffsetNumber() call with deleted pages */
225231
if (GistPageIsDeleted(page))
226232
elog(NOTICE, "page is deleted");
233+
else
234+
maxoff = PageGetMaxOffsetNumber(page);
227235

228236
for (offset = FirstOffsetNumber;
229-
offset <= PageGetMaxOffsetNumber(page);
237+
offset <= maxoff;
230238
offset++)
231239
{
232240
Datum values[4];

0 commit comments

Comments
 (0)