59 (
errmsg(
"wrong number of arguments to get_raw_page()"),
60 errhint(
"Run the updated pageinspect.sql script.")));
104 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
105 (
errmsg(
"must be superuser to use raw page functions"))));
111 if (rel->
rd_rel->relkind == RELKIND_VIEW)
113 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
114 errmsg(
"cannot get raw page from view \"%s\"",
116 if (rel->
rd_rel->relkind == RELKIND_COMPOSITE_TYPE)
118 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
119 errmsg(
"cannot get raw page from composite type \"%s\"",
121 if (rel->
rd_rel->relkind == RELKIND_FOREIGN_TABLE)
123 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
124 errmsg(
"cannot get raw page from foreign table \"%s\"",
126 if (rel->
rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
128 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
129 errmsg(
"cannot get raw page from partitioned table \"%s\"",
131 if (rel->
rd_rel->relkind == RELKIND_PARTITIONED_INDEX)
133 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
134 errmsg(
"cannot get raw page from partitioned index \"%s\"",
144 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
145 errmsg(
"cannot access temporary tables of other sessions")));
149 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
150 errmsg(
"block number %u is out of range for relation \"%s\"",
156 raw_page_data =
VARDATA(raw_page);
194 if (raw_page_size != BLCKSZ)
196 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
197 errmsg(
"invalid page size"),
199 BLCKSZ, raw_page_size)));
201 page =
palloc(raw_page_size);
203 memcpy(page,
VARDATA_ANY(raw_page), raw_page_size);
235 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
236 (
errmsg(
"must be superuser to use raw page functions"))));
246 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
247 errmsg(
"input page too small (%d bytes)", raw_page_size)));
253 elog(
ERROR,
"return type must be a row type");
264 snprintf(lsnchar,
sizeof(lsnchar),
"%X/%X",
281 memset(nulls, 0,
sizeof(nulls));
307 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
308 (
errmsg(
"must be superuser to use raw page functions"))));
315 if (raw_page_size != BLCKSZ)
317 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
318 errmsg(
"incorrect size of input page (%d bytes)", raw_page_size)));
#define PG_GETARG_UINT32(n)
Page get_page_from_raw(bytea *raw_page)
#define PG_GETARG_INT32(n)
#define BUFFER_LOCK_UNLOCK
TypeFuncClass get_call_result_type(FunctionCallInfo fcinfo, Oid *resultTypeId, TupleDesc *resultTupleDesc)
int errhint(const char *fmt,...)
#define TupleDescAttr(tupdesc, i)
Buffer ReadBufferExtended(Relation reln, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, BufferAccessStrategy strategy)
#define PG_RETURN_INT16(x)
int errcode(int sqlerrcode)
void ReleaseBuffer(Buffer buffer)
static bytea * get_raw_page_internal(text *relname, ForkNumber forknum, BlockNumber blkno)
RangeVar * makeRangeVarFromNameList(List *names)
HeapTuple heap_form_tuple(TupleDesc tupleDescriptor, Datum *values, bool *isnull)
#define PG_RETURN_BYTEA_P(x)
#define SizeOfPageHeaderData
ForkNumber forkname_to_number(const char *forkName)
#define PG_GETARG_TEXT_PP(n)
#define PG_GETARG_BYTEA_P(n)
Datum page_header(PG_FUNCTION_ARGS)
#define PageGetPageLayoutVersion(page)
int errdetail(const char *fmt,...)
#define PageGetPageSize(page)
#define RelationGetRelationName(relation)
#define BufferGetPage(buffer)
#define ereport(elevel, rest)
List * textToQualifiedNameList(text *textval)
#define TransactionIdGetDatum(X)
Datum get_raw_page_fork(PG_FUNCTION_ARGS)
#define PG_RETURN_DATUM(x)
void LockBuffer(Buffer buffer, int mode)
Relation relation_openrv(const RangeVar *relation, LOCKMODE lockmode)
Datum get_raw_page(PG_FUNCTION_ARGS)
BlockNumber RelationGetNumberOfBlocksInFork(Relation relation, ForkNumber forkNum)
PageHeaderData * PageHeader
void relation_close(Relation relation, LOCKMODE lockmode)
PG_FUNCTION_INFO_V1(get_raw_page)
#define RELATION_IS_OTHER_TEMP(relation)
#define HeapTupleGetDatum(tuple)
static Datum values[MAXATTR]
char * text_to_cstring(const text *t)
#define VARSIZE_ANY_EXHDR(PTR)
int errmsg(const char *fmt,...)
#define BUFFER_LOCK_SHARE
#define CStringGetTextDatum(s)
#define SET_VARSIZE(PTR, len)
#define UInt16GetDatum(X)
uint16 pg_checksum_page(char *page, BlockNumber blkno)
Datum page_checksum(PG_FUNCTION_ARGS)