50 #define IS_INDEX(r) ((r)->rd_rel->relkind == RELKIND_INDEX) 51 #define IS_BTREE(r) ((r)->rd_rel->relam == BTREE_AM_OID) 52 #define DatumGetItemPointer(X) ((ItemPointer) DatumGetPointer(X)) 53 #define ItemPointerGetDatum(X) PointerGetDatum(X) 56 #define CHECK_RELATION_BLOCK_RANGE(rel, blkno) { \ 57 if ( RelationGetNumberOfBlocks(rel) <= (BlockNumber) (blkno) ) \ 58 elog(ERROR, "block number out of range"); } 128 elog(
NOTICE,
"deleted page from block %u has safexid %u:%u",
133 elog(
NOTICE,
"deleted page from block %u has safexid %u",
202 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
203 errmsg(
"must be superuser to use pageinspect functions")));
209 elog(
ERROR,
"relation \"%s\" is not a btree index",
219 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
220 errmsg(
"cannot access temporary tables of other sessions")));
224 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
225 errmsg(
"invalid block number")));
229 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
230 errmsg(
"block 0 is a meta page")));
248 elog(
ERROR,
"return type must be a row type");
332 memset(nulls, 0,
sizeof(nulls));
371 elog(
ERROR,
"invalid tuple length %d for tuple at offset number %u",
375 for (off = 0; off < dlen; off++)
379 sprintf(dump,
"%02x", *(ptr + off) & 0xff);
391 ispivottuple = (!leafpage || (!rightmost && offset ==
P_HIKEY));
424 for (
int i = 0;
i < nposting;
i++)
430 false, TYPALIGN_SHORT));
462 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
463 errmsg(
"must be superuser to use pageinspect functions")));
479 elog(
ERROR,
"relation \"%s\" is not a btree index",
489 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
490 errmsg(
"cannot access temporary tables of other sessions")));
494 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
495 errmsg(
"invalid block number")));
499 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
500 errmsg(
"block 0 is a meta page")));
539 elog(
ERROR,
"return type must be a row type");
542 uargs->
tupd = tupleDesc;
595 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
596 errmsg(
"must be superuser to use raw page functions")));
608 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
609 errmsg(
"input page too small (%d bytes)", raw_page_size)));
624 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
625 errmsg(
"block is a meta page")));
643 elog(
ERROR,
"return type must be a row type");
646 uargs->
tupd = tupleDesc;
667 #define BT_METAP_COLS_V1_8 9 694 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
695 errmsg(
"must be superuser to use pageinspect functions")));
701 elog(
ERROR,
"relation \"%s\" is not a btree index",
711 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
712 errmsg(
"cannot access temporary tables of other sessions")));
722 elog(
ERROR,
"return type must be a row type");
734 (
errcode(ERRCODE_INVALID_FUNCTION_DEFINITION),
735 errmsg(
"function has wrong number of declared columns"),
736 errhint(
"To resolve the problem, update the \"pageinspect\" extension to the latest version.")));
struct BTPageStat BTPageStat
#define PG_GETARG_UINT32(n)
#define IndexInfoFindDataOffset(t_info)
static Datum bt_page_print_tuples(struct user_args *uargs)
TypeFuncClass get_call_result_type(FunctionCallInfo fcinfo, Oid *resultTypeId, TupleDesc *resultTupleDesc)
int errhint(const char *fmt,...)
#define CHECK_RELATION_BLOCK_RANGE(rel, blkno)
Datum bt_page_items(PG_FUNCTION_ARGS)
static bool BTreeTupleIsPivot(IndexTuple itup)
Datum bt_page_stats(PG_FUNCTION_ARGS)
static ItemPointer BTreeTupleGetHeapTID(IndexTuple itup)
static Datum bt_page_items_internal(PG_FUNCTION_ARGS, enum pageinspect_version ext_version)
#define SRF_IS_FIRSTCALL()
#define PointerGetDatum(X)
static ItemPointer BTreeTupleGetPosting(IndexTuple posting)
char * psprintf(const char *fmt,...)
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
ArrayType * construct_array(Datum *elems, int nelems, Oid elmtype, int elmlen, bool elmbyval, char elmalign)
int errcode(int sqlerrcode)
#define IndexTupleHasNulls(itup)
RangeVar * makeRangeVarFromNameList(List *names)
HeapTuple heap_form_tuple(TupleDesc tupleDescriptor, Datum *values, bool *isnull)
Datum bt_page_items_1_9(PG_FUNCTION_ARGS)
#define SizeOfPageHeaderData
#define ItemIdIsDead(itemId)
#define PageGetMaxOffsetNumber(page)
#define SRF_PERCALL_SETUP()
BTPageOpaqueData * BTPageOpaque
Size PageGetFreeSpace(Page page)
HeapTuple BuildTupleFromCStrings(AttInMetadata *attinmeta, char **values)
#define PG_GETARG_TEXT_PP(n)
#define XidFromFullTransactionId(x)
#define P_HAS_FULLXID(opaque)
#define SRF_RETURN_NEXT(_funcctx, _result)
#define PG_GETARG_BYTEA_P(n)
void pfree(void *pointer)
void UnlockReleaseBuffer(Buffer buffer)
static Datum bt_page_stats_internal(PG_FUNCTION_ARGS, enum pageinspect_version ext_version)
TupleDesc BlessTupleDesc(TupleDesc tupdesc)
Datum bt_metap(PG_FUNCTION_ARGS)
#define FirstOffsetNumber
IndexTupleData * IndexTuple
#define PageGetPageSize(page)
#define RelationGetRelationName(relation)
#define BTREE_NOVAC_VERSION
Datum bt_page_items_bytea(PG_FUNCTION_ARGS)
#define BufferGetPage(buffer)
uint32 btm_last_cleanup_num_delpages
#define P_ISDELETED(opaque)
List * textToQualifiedNameList(text *textval)
#define PageGetItemId(page, offsetNumber)
#define BT_METAP_COLS_V1_8
void * palloc0(Size size)
#define PG_RETURN_DATUM(x)
AttInMetadata * TupleDescGetAttInMetadata(TupleDesc tupdesc)
void LockBuffer(Buffer buffer, int mode)
Relation relation_openrv(const RangeVar *relation, LOCKMODE lockmode)
#define EpochFromFullTransactionId(x)
#define InvalidOffsetNumber
#define ereport(elevel,...)
#define ItemIdIsValid(itemId)
static bool BTreeTupleIsPosting(IndexTuple itup)
static uint32 BTreeTupleGetPostingOffset(IndexTuple posting)
PageHeaderData * PageHeader
void relation_close(Relation relation, LOCKMODE lockmode)
#define Assert(condition)
#define RELATION_IS_OTHER_TEMP(relation)
static FullTransactionId BTPageGetDeleteXid(Page page)
MemoryContext multi_call_memory_ctx
Buffer ReadBuffer(Relation reln, BlockNumber blockNum)
#define PageGetSpecialPointer(page)
#define InvalidBlockNumber
float8 btm_last_cleanup_num_heap_tuples
#define HeapTupleGetDatum(tuple)
#define IndexTupleHasVarwidths(itup)
static void GetBTPageStatistics(BlockNumber blkno, Buffer buffer, BTPageStat *stat)
static Datum values[MAXATTR]
PG_FUNCTION_INFO_V1(bt_metap)
int errmsg(const char *fmt,...)
#define BUFFER_LOCK_SHARE
#define CStringGetTextDatum(s)
static uint16 BTreeTupleGetNPosting(IndexTuple posting)
#define ItemPointerGetDatum(X)
Datum bt_page_stats_1_9(PG_FUNCTION_ARGS)
#define PG_GETARG_INT64(n)
#define P_RIGHTMOST(opaque)
#define PageGetItem(page, itemId)
#define IndexTupleSize(itup)
#define SRF_RETURN_DONE(_funcctx)
#define SRF_FIRSTCALL_INIT()