PostgreSQL Source Code  git master
hashdesc.c
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * hashdesc.c
4  * rmgr descriptor routines for access/hash/hash.c
5  *
6  * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
7  * Portions Copyright (c) 1994, Regents of the University of California
8  *
9  *
10  * IDENTIFICATION
11  * src/backend/access/rmgrdesc/hashdesc.c
12  *
13  *-------------------------------------------------------------------------
14  */
15 #include "postgres.h"
16 
17 #include "access/hash_xlog.h"
18 
19 void
21 {
22  char *rec = XLogRecGetData(record);
23  uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
24 
25  switch (info)
26  {
28  {
30 
31  appendStringInfo(buf, "num_tuples %g, fillfactor %d",
32  xlrec->num_tuples, xlrec->ffactor);
33  break;
34  }
36  {
38 
39  appendStringInfo(buf, "bmsize %d", xlrec->bmsize);
40  break;
41  }
42  case XLOG_HASH_INSERT:
43  {
44  xl_hash_insert *xlrec = (xl_hash_insert *) rec;
45 
46  appendStringInfo(buf, "off %u", xlrec->offnum);
47  break;
48  }
50  {
52 
53  appendStringInfo(buf, "bmsize %d, bmpage_found %c",
54  xlrec->bmsize, (xlrec->bmpage_found) ? 'T' : 'F');
55  break;
56  }
58  {
60 
61  appendStringInfo(buf, "new_bucket %u, meta_page_masks_updated %c, issplitpoint_changed %c",
62  xlrec->new_bucket,
63  (xlrec->flags & XLH_SPLIT_META_UPDATE_MASKS) ? 'T' : 'F',
64  (xlrec->flags & XLH_SPLIT_META_UPDATE_SPLITPOINT) ? 'T' : 'F');
65  break;
66  }
68  {
70 
71  appendStringInfo(buf, "old_bucket_flag %u, new_bucket_flag %u",
72  xlrec->old_bucket_flag, xlrec->new_bucket_flag);
73  break;
74  }
76  {
78 
79  appendStringInfo(buf, "ntups %d, is_primary %c",
80  xlrec->ntups,
81  xlrec->is_prim_bucket_same_wrt ? 'T' : 'F');
82  break;
83  }
85  {
87 
88  appendStringInfo(buf, "prevblkno %u, nextblkno %u, ntups %d, is_primary %c",
89  xlrec->prevblkno,
90  xlrec->nextblkno,
91  xlrec->ntups,
92  xlrec->is_prim_bucket_same_wrt ? 'T' : 'F');
93  break;
94  }
95  case XLOG_HASH_DELETE:
96  {
97  xl_hash_delete *xlrec = (xl_hash_delete *) rec;
98 
99  appendStringInfo(buf, "clear_dead_marking %c, is_primary %c",
100  xlrec->clear_dead_marking ? 'T' : 'F',
101  xlrec->is_primary_bucket_page ? 'T' : 'F');
102  break;
103  }
105  {
107 
108  appendStringInfo(buf, "ntuples %g",
109  xlrec->ntuples);
110  break;
111  }
113  {
115 
116  appendStringInfo(buf, "ntuples %d, snapshotConflictHorizon %u, isCatalogRel %c",
117  xlrec->ntuples,
119  xlrec->isCatalogRel ? 'T' : 'F');
120  break;
121  }
122  }
123 }
124 
125 const char *
127 {
128  const char *id = NULL;
129 
130  switch (info & ~XLR_INFO_MASK)
131  {
133  id = "INIT_META_PAGE";
134  break;
136  id = "INIT_BITMAP_PAGE";
137  break;
138  case XLOG_HASH_INSERT:
139  id = "INSERT";
140  break;
142  id = "ADD_OVFL_PAGE";
143  break;
145  id = "SPLIT_ALLOCATE_PAGE";
146  break;
148  id = "SPLIT_PAGE";
149  break;
151  id = "SPLIT_COMPLETE";
152  break;
154  id = "MOVE_PAGE_CONTENTS";
155  break;
157  id = "SQUEEZE_PAGE";
158  break;
159  case XLOG_HASH_DELETE:
160  id = "DELETE";
161  break;
163  id = "SPLIT_CLEANUP";
164  break;
166  id = "UPDATE_META_PAGE";
167  break;
169  id = "VACUUM_ONE_PAGE";
170  }
171 
172  return id;
173 }
unsigned char uint8
Definition: c.h:504
#define XLOG_HASH_INIT_BITMAP_PAGE
Definition: hash_xlog.h:28
#define XLOG_HASH_SQUEEZE_PAGE
Definition: hash_xlog.h:35
#define XLOG_HASH_SPLIT_CLEANUP
Definition: hash_xlog.h:37
#define XLOG_HASH_ADD_OVFL_PAGE
Definition: hash_xlog.h:30
#define XLOG_HASH_UPDATE_META_PAGE
Definition: hash_xlog.h:38
#define XLOG_HASH_INSERT
Definition: hash_xlog.h:29
#define XLOG_HASH_SPLIT_ALLOCATE_PAGE
Definition: hash_xlog.h:31
#define XLOG_HASH_SPLIT_PAGE
Definition: hash_xlog.h:32
#define XLOG_HASH_INIT_META_PAGE
Definition: hash_xlog.h:27
#define XLOG_HASH_DELETE
Definition: hash_xlog.h:36
#define XLOG_HASH_SPLIT_COMPLETE
Definition: hash_xlog.h:33
#define XLH_SPLIT_META_UPDATE_SPLITPOINT
Definition: hash_xlog.h:46
#define XLOG_HASH_MOVE_PAGE_CONTENTS
Definition: hash_xlog.h:34
#define XLOG_HASH_VACUUM_ONE_PAGE
Definition: hash_xlog.h:40
#define XLH_SPLIT_META_UPDATE_MASKS
Definition: hash_xlog.h:45
const char * hash_identify(uint8 info)
Definition: hashdesc.c:126
void hash_desc(StringInfo buf, XLogReaderState *record)
Definition: hashdesc.c:20
static char * buf
Definition: pg_test_fsync.c:73
void appendStringInfo(StringInfo str, const char *fmt,...)
Definition: stringinfo.c:97
bool clear_dead_marking
Definition: hash_xlog.h:180
bool is_primary_bucket_page
Definition: hash_xlog.h:182
OffsetNumber offnum
Definition: hash_xlog.h:58
BlockNumber prevblkno
Definition: hash_xlog.h:155
bool is_prim_bucket_same_wrt
Definition: hash_xlog.h:158
BlockNumber nextblkno
Definition: hash_xlog.h:156
TransactionId snapshotConflictHorizon
Definition: hash_xlog.h:247
#define XLogRecGetInfo(decoder)
Definition: xlogreader.h:410
#define XLogRecGetData(decoder)
Definition: xlogreader.h:415
#define XLR_INFO_MASK
Definition: xlogrecord.h:62