@@ -340,9 +340,6 @@ get_rel_from_name(text *relName)
340340static Page
341341get_rel_page (Relation rel , BlockNumber blkNo )
342342{
343- bytea * rawPage ;
344- char * rawPageData ;
345- int rawPageSize ;
346343 Buffer buf ;
347344 Page page ;
348345
@@ -352,35 +349,18 @@ get_rel_page(Relation rel, BlockNumber blkNo)
352349 errmsg ("block number %u is out of range for relation \"%s\"" ,
353350 blkNo , RelationGetRelationName (rel ))));
354351
355- /* Initialize buffer to copy to */
356- rawPage = (bytea * ) palloc (BLCKSZ + VARHDRSZ );
357- SET_VARSIZE (rawPage , BLCKSZ + VARHDRSZ );
358- rawPageData = VARDATA (rawPage );
359-
360- /* Take a verbatim copy of the page */
361352 buf = ReadBufferExtended (rel , MAIN_FORKNUM , blkNo , RBM_NORMAL , NULL );
362- LockBuffer (buf , BUFFER_LOCK_SHARE );
363-
364- memcpy (rawPageData , BufferGetPage (buf ), BLCKSZ );
365-
366- LockBuffer (buf , BUFFER_LOCK_UNLOCK );
367- ReleaseBuffer (buf );
368-
369- rawPageSize = VARSIZE_ANY_EXHDR (rawPage );
370-
371- if (rawPageSize != BLCKSZ )
353+ if (!BufferIsValid (buf ))
372354 ereport (ERROR ,
373355 (errcode (ERRCODE_INVALID_PARAMETER_VALUE ),
374- errmsg ("invalid page size" ),
375- errdetail ("Expected %d bytes, got %d." ,
376- BLCKSZ , rawPageSize )));
377-
378- page = palloc (rawPageSize );
379-
380- memcpy (page , VARDATA_ANY (rawPage ), rawPageSize );
356+ errmsg ("could not read block %u of relation \"%s\"" ,
357+ blkNo , RelationGetRelationName (rel ))));
381358
382- /* Cleaning the memory that raw_page occupies */
383- pfree (rawPage );
359+ LockBuffer (buf , BUFFER_LOCK_SHARE );
360+ page = (Page ) palloc (BLCKSZ );
361+ memcpy (page , BufferGetPage (buf ), BLCKSZ );
362+ LockBuffer (buf , BUFFER_LOCK_UNLOCK );
363+ ReleaseBuffer (buf );
384364
385365 return page ;
386366}
0 commit comments