1 /*-------------------------------------------------------------------------
4 * rmgr descriptor routines for access/nbtree/nbtxlog.c
6 * Portions Copyright (c) 1996-2015, 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/nbtree.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:
38 case XLOG_BTREE_SPLIT_L_ROOT:
39 case XLOG_BTREE_SPLIT_R_ROOT:
41 xl_btree_split *xlrec = (xl_btree_split *) rec;
43 appendStringInfo(buf, "level %u, firstright %d",
44 xlrec->level, xlrec->firstright);
47 case XLOG_BTREE_VACUUM:
49 xl_btree_vacuum *xlrec = (xl_btree_vacuum *) rec;
51 appendStringInfo(buf, "lastBlockVacuumed %u",
52 xlrec->lastBlockVacuumed);
55 case XLOG_BTREE_DELETE:
57 xl_btree_delete *xlrec = (xl_btree_delete *) rec;
59 appendStringInfo(buf, "%d items", xlrec->nitems);
62 case XLOG_BTREE_MARK_PAGE_HALFDEAD:
64 xl_btree_mark_page_halfdead *xlrec = (xl_btree_mark_page_halfdead *) rec;
66 appendStringInfo(buf, "topparent %u; leaf %u; left %u; right %u",
67 xlrec->topparent, xlrec->leafblk, xlrec->leftblk, xlrec->rightblk);
70 case XLOG_BTREE_UNLINK_PAGE_META:
71 case XLOG_BTREE_UNLINK_PAGE:
73 xl_btree_unlink_page *xlrec = (xl_btree_unlink_page *) rec;
75 appendStringInfo(buf, "left %u; right %u; btpo_xact %u; ",
76 xlrec->leftsib, xlrec->rightsib,
78 appendStringInfo(buf, "leafleft %u; leafright %u; topparent %u",
79 xlrec->leafleftsib, xlrec->leafrightsib,
83 case XLOG_BTREE_NEWROOT:
85 xl_btree_newroot *xlrec = (xl_btree_newroot *) rec;
87 appendStringInfo(buf, "lev %u", xlrec->level);
90 case XLOG_BTREE_REUSE_PAGE:
92 xl_btree_reuse_page *xlrec = (xl_btree_reuse_page *) rec;
94 appendStringInfo(buf, "rel %u/%u/%u; latestRemovedXid %u",
95 xlrec->node.spcNode, xlrec->node.dbNode,
96 xlrec->node.relNode, xlrec->latestRemovedXid);
103 btree_identify(uint8 info)
105 const char *id = NULL;
107 switch (info & ~XLR_INFO_MASK)
109 case XLOG_BTREE_INSERT_LEAF:
112 case XLOG_BTREE_INSERT_UPPER:
115 case XLOG_BTREE_INSERT_META:
118 case XLOG_BTREE_SPLIT_L:
121 case XLOG_BTREE_SPLIT_R:
124 case XLOG_BTREE_SPLIT_L_ROOT:
127 case XLOG_BTREE_SPLIT_R_ROOT:
130 case XLOG_BTREE_VACUUM:
133 case XLOG_BTREE_DELETE:
136 case XLOG_BTREE_MARK_PAGE_HALFDEAD:
137 id = "MARK_PAGE_HALFDEAD";
139 case XLOG_BTREE_UNLINK_PAGE:
142 case XLOG_BTREE_UNLINK_PAGE_META:
143 id = "UNLINK_PAGE_META";
145 case XLOG_BTREE_NEWROOT:
148 case XLOG_BTREE_REUSE_PAGE: