PolarDB-for-PostgreSQL

Форк
0
60 строк · 1.5 Кб
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-2018, PostgreSQL Global Development Group
13
 *
14
 * IDENTIFICATION
15
 *	  contrib/pageinspect/fsmfuncs.c
16
 *
17
 *-------------------------------------------------------------------------
18
 */
19

20
#include "postgres.h"
21

22
#include "pageinspect.h"
23

24
#include "funcapi.h"
25
#include "lib/stringinfo.h"
26
#include "miscadmin.h"
27
#include "storage/fsm_internals.h"
28
#include "utils/builtins.h"
29

30
/*
31
 * Dumps the contents of a FSM page.
32
 */
33
PG_FUNCTION_INFO_V1(fsm_page_contents);
34

35
Datum
36
fsm_page_contents(PG_FUNCTION_ARGS)
37
{
38
	bytea	   *raw_page = PG_GETARG_BYTEA_P(0);
39
	StringInfoData sinfo;
40
	FSMPage		fsmpage;
41
	int			i;
42

43
	if (!superuser())
44
		ereport(ERROR,
45
				(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
46
				 (errmsg("must be superuser to use raw page functions"))));
47

48
	fsmpage = (FSMPage) PageGetContents(VARDATA(raw_page));
49

50
	initStringInfo(&sinfo);
51

52
	for (i = 0; i < NodesPerPage; i++)
53
	{
54
		if (fsmpage->fp_nodes[i] != 0)
55
			appendStringInfo(&sinfo, "%d: %d\n", i, fsmpage->fp_nodes[i]);
56
	}
57
	appendStringInfo(&sinfo, "fp_next_slot: %d\n", fsmpage->fp_next_slot);
58

59
	PG_RETURN_TEXT_P(cstring_to_text_with_len(sinfo.data, sinfo.len));
60
}
61

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.