@@ -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 ;
346343Buffer buf ;
347344Page page ;
348345
@@ -352,35 +349,18 @@ get_rel_page(Relation rel, BlockNumber blkNo)
352349errmsg ("block number %u is out of range for relation \"%s\"" ,
353350blkNo ,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 */
361352buf = 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 ))
372354ereport (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
385365return page ;
386366}