PostgreSQL Source Code git master
Loading...
Searching...
No Matches
fsmfuncs.c
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * fsmfuncs.c
4 * Functions to investigate FSM pages
5 *
6 * These functions are restricted to superusers for the fear of introducing
7 * security holes if the input checking isn't as water-tight as it should.
8 * You'd need to be superuser to obtain a raw page image anyway, so
9 * there's hardly any use case for using these without superuser-rights
10 * anyway.
11 *
12 * Copyright (c) 2007-2026, PostgreSQL Global Development Group
13 *
14 * IDENTIFICATION
15 * contrib/pageinspect/fsmfuncs.c
16 *
17 *-------------------------------------------------------------------------
18 */
19
20#include "postgres.h"
21
22#include "fmgr.h"
23#include "lib/stringinfo.h"
24#include "miscadmin.h"
25#include "pageinspect.h"
27#include "utils/builtins.h"
28
29/*
30 * Dumps the contents of a FSM page.
31 */
33
36{
37 bytea *raw_page = PG_GETARG_BYTEA_P(0);
38 StringInfoData sinfo;
39 Page page;
40 FSMPage fsmpage;
41 int i;
42
43 if (!superuser())
45 (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
46 errmsg("must be superuser to use raw page functions")));
47
48 page = get_page_from_raw(raw_page);
49
50 if (PageIsNew(page))
52
53 fsmpage = (FSMPage) PageGetContents(page);
54
55 initStringInfo(&sinfo);
56
57 for (i = 0; i < NodesPerPage; i++)
58 {
59 if (fsmpage->fp_nodes[i] != 0)
60 appendStringInfo(&sinfo, "%d: %d\n", i, fsmpage->fp_nodes[i]);
61 }
62 appendStringInfo(&sinfo, "fp_next_slot: %d\n", fsmpage->fp_next_slot);
63
65}
static bool PageIsNew(const PageData *page)
Definition bufpage.h:258
static char * PageGetContents(Page page)
Definition bufpage.h:282
PageData * Page
Definition bufpage.h:81
int errcode(int sqlerrcode)
Definition elog.c:874
#define ERROR
Definition elog.h:40
#define ereport(elevel,...)
Definition elog.h:152
#define PG_RETURN_NULL()
Definition fmgr.h:346
#define PG_FUNCTION_INFO_V1(funcname)
Definition fmgr.h:417
#define PG_RETURN_TEXT_P(x)
Definition fmgr.h:374
#define PG_GETARG_BYTEA_P(n)
Definition fmgr.h:336
#define PG_FUNCTION_ARGS
Definition fmgr.h:193
#define NodesPerPage
FSMPageData * FSMPage
Datum fsm_page_contents(PG_FUNCTION_ARGS)
Definition fsmfuncs.c:35
int i
Definition isn.c:77
static char * errmsg
Page get_page_from_raw(bytea *raw_page)
Definition rawpage.c:215
uint64_t Datum
Definition postgres.h:70
void appendStringInfo(StringInfo str, const char *fmt,...)
Definition stringinfo.c:145
void initStringInfo(StringInfo str)
Definition stringinfo.c:97
uint8 fp_nodes[FLEXIBLE_ARRAY_MEMBER]
Definition c.h:776
bool superuser(void)
Definition superuser.c:47
text * cstring_to_text_with_len(const char *s, int len)
Definition varlena.c:196