PostgreSQL Source Code  git master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
brindesc.c
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * brindesc.c
4  * rmgr descriptor routines for BRIN indexes
5  *
6  * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
7  * Portions Copyright (c) 1994, Regents of the University of California
8  *
9  *
10  * IDENTIFICATION
11  * src/backend/access/rmgrdesc/brindesc.c
12  *
13  *-------------------------------------------------------------------------
14  */
15 #include "postgres.h"
16 
17 #include "access/brin_xlog.h"
18 
19 void
21 {
22  char *rec = XLogRecGetData(record);
23  uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
24 
25  info &= XLOG_BRIN_OPMASK;
26  if (info == XLOG_BRIN_CREATE_INDEX)
27  {
28  xl_brin_createidx *xlrec = (xl_brin_createidx *) rec;
29 
30  appendStringInfo(buf, "v%d pagesPerRange %u",
31  xlrec->version, xlrec->pagesPerRange);
32  }
33  else if (info == XLOG_BRIN_INSERT)
34  {
35  xl_brin_insert *xlrec = (xl_brin_insert *) rec;
36 
37  appendStringInfo(buf, "heapBlk %u pagesPerRange %u offnum %u",
38  xlrec->heapBlk,
39  xlrec->pagesPerRange,
40  xlrec->offnum);
41  }
42  else if (info == XLOG_BRIN_UPDATE)
43  {
44  xl_brin_update *xlrec = (xl_brin_update *) rec;
45 
46  appendStringInfo(buf, "heapBlk %u pagesPerRange %u old offnum %u, new offnum %u",
47  xlrec->insert.heapBlk,
48  xlrec->insert.pagesPerRange,
49  xlrec->oldOffnum,
50  xlrec->insert.offnum);
51  }
52  else if (info == XLOG_BRIN_SAMEPAGE_UPDATE)
53  {
55 
56  appendStringInfo(buf, "offnum %u", xlrec->offnum);
57  }
58  else if (info == XLOG_BRIN_REVMAP_EXTEND)
59  {
61 
62  appendStringInfo(buf, "targetBlk %u", xlrec->targetBlk);
63  }
64 }
65 
66 const char *
68 {
69  const char *id = NULL;
70 
71  switch (info & ~XLR_INFO_MASK)
72  {
74  id = "CREATE_INDEX";
75  break;
76  case XLOG_BRIN_INSERT:
77  id = "INSERT";
78  break;
80  id = "INSERT+INIT";
81  break;
82  case XLOG_BRIN_UPDATE:
83  id = "UPDATE";
84  break;
86  id = "UPDATE+INIT";
87  break;
89  id = "SAMEPAGE_UPDATE";
90  break;
92  id = "REVMAP_EXTEND";
93  break;
94  }
95 
96  return id;
97 }
BlockNumber heapBlk
Definition: brin_xlog.h:65
void brin_desc(StringInfo buf, XLogReaderState *record)
Definition: brindesc.c:20
OffsetNumber offnum
Definition: brin_xlog.h:104
unsigned char uint8
Definition: c.h:263
#define XLOG_BRIN_CREATE_INDEX
Definition: brin_xlog.h:31
#define XLOG_BRIN_UPDATE
Definition: brin_xlog.h:33
#define XLogRecGetData(decoder)
Definition: xlogreader.h:202
void appendStringInfo(StringInfo str, const char *fmt,...)
Definition: stringinfo.c:110
BlockNumber pagesPerRange
Definition: brin_xlog.h:68
static char * buf
Definition: pg_test_fsync.c:65
BlockNumber targetBlk
Definition: brin_xlog.h:121
#define XLogRecGetInfo(decoder)
Definition: xlogreader.h:198
#define XLOG_BRIN_REVMAP_EXTEND
Definition: brin_xlog.h:35
#define XLOG_BRIN_INIT_PAGE
Definition: brin_xlog.h:43
const char * brin_identify(uint8 info)
Definition: brindesc.c:67
#define XLOG_BRIN_INSERT
Definition: brin_xlog.h:32
xl_brin_insert insert
Definition: brin_xlog.h:92
#define NULL
Definition: c.h:226
#define XLR_INFO_MASK
Definition: xlogrecord.h:62
#define XLOG_BRIN_SAMEPAGE_UPDATE
Definition: brin_xlog.h:34
OffsetNumber offnum
Definition: brin_xlog.h:71
#define XLOG_BRIN_OPMASK
Definition: brin_xlog.h:38
BlockNumber pagesPerRange
Definition: brin_xlog.h:52
OffsetNumber oldOffnum
Definition: brin_xlog.h:90