1 /*-------------------------------------------------------------------------
4 * rmgr descriptor routines for access/nbtree/nbtxlog.c
6 * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
11 * src/backend/access/rmgrdesc/nbtdesc.c
13 *-------------------------------------------------------------------------
17 #include "access/nbtxlog.h"
20 btree_desc(StringInfo buf, XLogReaderState *record)
22 char *rec = XLogRecGetData(record);
23 uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
27 case XLOG_BTREE_INSERT_LEAF:
28 case XLOG_BTREE_INSERT_UPPER:
29 case XLOG_BTREE_INSERT_META:
31 xl_btree_insert *xlrec = (xl_btree_insert *) rec;
33 appendStringInfo(buf, "off %u", xlrec->offnum);
36 case XLOG_BTREE_SPLIT_L:
37 case XLOG_BTREE_SPLIT_R:
39 xl_btree_split *xlrec = (xl_btree_split *) rec;
41 appendStringInfo(buf, "level %u, firstright %d",
42 xlrec->level, xlrec->firstright);
45 case XLOG_BTREE_VACUUM:
47 xl_btree_vacuum *xlrec = (xl_btree_vacuum *) rec;
49 appendStringInfo(buf, "lastBlockVacuumed %u",
50 xlrec->lastBlockVacuumed);
53 case XLOG_BTREE_DELETE:
55 xl_btree_delete *xlrec = (xl_btree_delete *) rec;
57 appendStringInfo(buf, "%d items", xlrec->nitems);
60 case XLOG_BTREE_MARK_PAGE_HALFDEAD:
62 xl_btree_mark_page_halfdead *xlrec = (xl_btree_mark_page_halfdead *) rec;
64 appendStringInfo(buf, "topparent %u; leaf %u; left %u; right %u",
65 xlrec->topparent, xlrec->leafblk, xlrec->leftblk, xlrec->rightblk);
68 case XLOG_BTREE_UNLINK_PAGE_META:
69 case XLOG_BTREE_UNLINK_PAGE:
71 xl_btree_unlink_page *xlrec = (xl_btree_unlink_page *) rec;
73 appendStringInfo(buf, "left %u; right %u; btpo_xact %u; ",
74 xlrec->leftsib, xlrec->rightsib,
76 appendStringInfo(buf, "leafleft %u; leafright %u; topparent %u",
77 xlrec->leafleftsib, xlrec->leafrightsib,
81 case XLOG_BTREE_NEWROOT:
83 xl_btree_newroot *xlrec = (xl_btree_newroot *) rec;
85 appendStringInfo(buf, "lev %u", xlrec->level);
88 case XLOG_BTREE_REUSE_PAGE:
90 xl_btree_reuse_page *xlrec = (xl_btree_reuse_page *) rec;
92 appendStringInfo(buf, "rel %u/%u/%u; latestRemovedXid %u",
93 xlrec->node.spcNode, xlrec->node.dbNode,
94 xlrec->node.relNode, xlrec->latestRemovedXid);
97 case XLOG_BTREE_META_CLEANUP:
99 xl_btree_metadata *xlrec = (xl_btree_metadata *) rec;
101 appendStringInfo(buf, "oldest_btpo_xact %u; last_cleanup_num_heap_tuples: %f",
102 xlrec->oldest_btpo_xact,
103 xlrec->last_cleanup_num_heap_tuples);
110 btree_identify(uint8 info)
112 const char *id = NULL;
114 switch (info & ~XLR_INFO_MASK)
116 case XLOG_BTREE_INSERT_LEAF:
119 case XLOG_BTREE_INSERT_UPPER:
122 case XLOG_BTREE_INSERT_META:
125 case XLOG_BTREE_SPLIT_L:
128 case XLOG_BTREE_SPLIT_R:
131 case XLOG_BTREE_VACUUM:
134 case XLOG_BTREE_DELETE:
137 case XLOG_BTREE_MARK_PAGE_HALFDEAD:
138 id = "MARK_PAGE_HALFDEAD";
140 case XLOG_BTREE_UNLINK_PAGE:
143 case XLOG_BTREE_UNLINK_PAGE_META:
144 id = "UNLINK_PAGE_META";
146 case XLOG_BTREE_NEWROOT:
149 case XLOG_BTREE_REUSE_PAGE:
152 case XLOG_BTREE_META_CLEANUP: