PostgreSQL Source Code  git master
nbtdesc.c
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * nbtdesc.c
4  * rmgr descriptor routines for access/nbtree/nbtxlog.c
5  *
6  * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
7  * Portions Copyright (c) 1994, Regents of the University of California
8  *
9  *
10  * IDENTIFICATION
11  * src/backend/access/rmgrdesc/nbtdesc.c
12  *
13  *-------------------------------------------------------------------------
14  */
15 #include "postgres.h"
16 
17 #include "access/nbtxlog.h"
18 
19 void
21 {
22  char *rec = XLogRecGetData(record);
23  uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
24 
25  switch (info)
26  {
31  {
32  xl_btree_insert *xlrec = (xl_btree_insert *) rec;
33 
34  appendStringInfo(buf, "off %u", xlrec->offnum);
35  break;
36  }
37  case XLOG_BTREE_SPLIT_L:
38  case XLOG_BTREE_SPLIT_R:
39  {
40  xl_btree_split *xlrec = (xl_btree_split *) rec;
41 
42  appendStringInfo(buf, "level %u, firstrightoff %d, newitemoff %d, postingoff %d",
43  xlrec->level, xlrec->firstrightoff,
44  xlrec->newitemoff, xlrec->postingoff);
45  break;
46  }
47  case XLOG_BTREE_DEDUP:
48  {
49  xl_btree_dedup *xlrec = (xl_btree_dedup *) rec;
50 
51  appendStringInfo(buf, "nintervals %u", xlrec->nintervals);
52  break;
53  }
54  case XLOG_BTREE_VACUUM:
55  {
56  xl_btree_vacuum *xlrec = (xl_btree_vacuum *) rec;
57 
58  appendStringInfo(buf, "ndeleted %u; nupdated %u",
59  xlrec->ndeleted, xlrec->nupdated);
60  break;
61  }
62  case XLOG_BTREE_DELETE:
63  {
64  xl_btree_delete *xlrec = (xl_btree_delete *) rec;
65 
66  appendStringInfo(buf, "latestRemovedXid %u; ndeleted %u; nupdated %u",
67  xlrec->latestRemovedXid, xlrec->ndeleted, xlrec->nupdated);
68  break;
69  }
71  {
73 
74  appendStringInfo(buf, "topparent %u; leaf %u; left %u; right %u",
75  xlrec->topparent, xlrec->leafblk, xlrec->leftblk, xlrec->rightblk);
76  break;
77  }
80  {
82 
83  appendStringInfo(buf, "left %u; right %u; level %u; safexid %u:%u; ",
84  xlrec->leftsib, xlrec->rightsib, xlrec->level,
87  appendStringInfo(buf, "leafleft %u; leafright %u; leaftopparent %u",
88  xlrec->leafleftsib, xlrec->leafrightsib,
89  xlrec->leaftopparent);
90  break;
91  }
92  case XLOG_BTREE_NEWROOT:
93  {
94  xl_btree_newroot *xlrec = (xl_btree_newroot *) rec;
95 
96  appendStringInfo(buf, "lev %u", xlrec->level);
97  break;
98  }
100  {
101  xl_btree_reuse_page *xlrec = (xl_btree_reuse_page *) rec;
102 
103  appendStringInfo(buf, "rel %u/%u/%u; latestRemovedXid %u:%u",
104  xlrec->node.spcNode, xlrec->node.dbNode,
105  xlrec->node.relNode,
108  break;
109  }
111  {
112  xl_btree_metadata *xlrec;
113 
114  xlrec = (xl_btree_metadata *) XLogRecGetBlockData(record, 0,
115  NULL);
116  appendStringInfo(buf, "last_cleanup_num_delpages %u",
118  break;
119  }
120  }
121 }
122 
123 const char *
125 {
126  const char *id = NULL;
127 
128  switch (info & ~XLR_INFO_MASK)
129  {
131  id = "INSERT_LEAF";
132  break;
134  id = "INSERT_UPPER";
135  break;
137  id = "INSERT_META";
138  break;
139  case XLOG_BTREE_SPLIT_L:
140  id = "SPLIT_L";
141  break;
142  case XLOG_BTREE_SPLIT_R:
143  id = "SPLIT_R";
144  break;
146  id = "INSERT_POST";
147  break;
148  case XLOG_BTREE_DEDUP:
149  id = "DEDUP";
150  break;
151  case XLOG_BTREE_VACUUM:
152  id = "VACUUM";
153  break;
154  case XLOG_BTREE_DELETE:
155  id = "DELETE";
156  break;
158  id = "MARK_PAGE_HALFDEAD";
159  break;
161  id = "UNLINK_PAGE";
162  break;
164  id = "UNLINK_PAGE_META";
165  break;
166  case XLOG_BTREE_NEWROOT:
167  id = "NEWROOT";
168  break;
170  id = "REUSE_PAGE";
171  break;
173  id = "META_CLEANUP";
174  break;
175  }
176 
177  return id;
178 }
uint16 ndeleted
Definition: nbtxlog.h:236
TransactionId latestRemovedXid
Definition: nbtxlog.h:235
uint32 last_cleanup_num_delpages
Definition: nbtxlog.h:56
uint16 nintervals
Definition: nbtxlog.h:172
unsigned char uint8
Definition: c.h:439
FullTransactionId latestRemovedFullXid
Definition: nbtxlog.h:190
uint16 nupdated
Definition: nbtxlog.h:237
#define XLOG_BTREE_INSERT_META
Definition: nbtxlog.h:29
RelFileNode node
Definition: nbtxlog.h:188
uint32 level
Definition: nbtxlog.h:335
uint16 nupdated
Definition: nbtxlog.h:224
#define XidFromFullTransactionId(x)
Definition: transam.h:48
#define XLOG_BTREE_NEWROOT
Definition: nbtxlog.h:37
#define XLogRecGetData(decoder)
Definition: xlogreader.h:320
void appendStringInfo(StringInfo str, const char *fmt,...)
Definition: stringinfo.c:91
const char * btree_identify(uint8 info)
Definition: nbtdesc.c:124
#define XLOG_BTREE_INSERT_LEAF
Definition: nbtxlog.h:27
OffsetNumber newitemoff
Definition: nbtxlog.h:157
static char * buf
Definition: pg_test_fsync.c:68
#define XLOG_BTREE_VACUUM
Definition: nbtxlog.h:39
#define XLOG_BTREE_UNLINK_PAGE
Definition: nbtxlog.h:35
#define XLogRecGetInfo(decoder)
Definition: xlogreader.h:315
#define XLOG_BTREE_DELETE
Definition: nbtxlog.h:34
uint16 ndeleted
Definition: nbtxlog.h:223
#define XLOG_BTREE_DEDUP
Definition: nbtxlog.h:33
char * XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len)
Definition: xlogreader.c:1555
#define XLOG_BTREE_REUSE_PAGE
Definition: nbtxlog.h:41
uint32 level
Definition: nbtxlog.h:155
#define XLOG_BTREE_MARK_PAGE_HALFDEAD
Definition: nbtxlog.h:38
OffsetNumber offnum
Definition: nbtxlog.h:81
#define EpochFromFullTransactionId(x)
Definition: transam.h:47
#define XLOG_BTREE_SPLIT_R
Definition: nbtxlog.h:31
#define XLR_INFO_MASK
Definition: xlogrecord.h:62
void btree_desc(StringInfo buf, XLogReaderState *record)
Definition: nbtdesc.c:20
#define XLOG_BTREE_INSERT_POST
Definition: nbtxlog.h:32
#define XLOG_BTREE_INSERT_UPPER
Definition: nbtxlog.h:28
#define XLOG_BTREE_SPLIT_L
Definition: nbtxlog.h:30
#define XLOG_BTREE_UNLINK_PAGE_META
Definition: nbtxlog.h:36
uint16 postingoff
Definition: nbtxlog.h:158
OffsetNumber firstrightoff
Definition: nbtxlog.h:156
#define XLOG_BTREE_META_CLEANUP
Definition: nbtxlog.h:43