/
githubmirror
/
postgres
Обзор
Документация
Войти
/
githubmirror
/
postgres
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
contrib/pageinspect/fsmfuncs.c
64 строки
2 KB
Peter Eisentraut
Fix for loop variables
11 июл 2026, 15:39
11 июл 2026, 15:39
e615da8
Код
Авторство
О чём код?
/*------------------------------------------------------------------------- * * fsmfuncs.c * Functions to investigate FSM pages * * These functions are restricted to superusers for the fear of introducing * security holes if the input checking isn't as water-tight as it should. * You'd need to be superuser to obtain a raw page image anyway, so * there's hardly any use case for using these without superuser-rights * anyway. * * Copyright (c) 2007-2026, PostgreSQL Global Development Group * * IDENTIFICATION * contrib/pageinspect/fsmfuncs.c * *------------------------------------------------------------------------- */ #include "postgres.h" #include "fmgr.h" #include "lib/stringinfo.h" #include "miscadmin.h" #include "pageinspect.h" #include "storage/fsm_internals.h" #include "utils/builtins.h" /* * Dumps the contents of a FSM page. */ PG_FUNCTION_INFO_V1(fsm_page_contents); Datum fsm_page_contents(PG_FUNCTION_ARGS) { bytea *raw_page = PG_GETARG_BYTEA_P(0); StringInfoData sinfo; Page page; FSMPage fsmpage; if (!superuser()) ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), errmsg("must be superuser to use raw page functions"))); page = get_page_from_raw(raw_page); if (PageIsNew(page)) PG_RETURN_NULL(); fsmpage = (FSMPage) PageGetContents(page); initStringInfo(&sinfo); for (size_t i = 0; i < NodesPerPage; i++) { if (fsmpage->fp_nodes[i] != 0) appendStringInfo(&sinfo, "%zu: %d\n", i, fsmpage->fp_nodes[i]); } appendStringInfo(&sinfo, "fp_next_slot: %d\n", fsmpage->fp_next_slot); PG_RETURN_TEXT_P(cstring_to_text_with_len(sinfo.data, sinfo.len)); }