Line data Source code
1 : /*-------------------------------------------------------------------------
2 : *
3 : * brindesc.c
4 : * rmgr descriptor routines for BRIN indexes
5 : *
6 : * Portions Copyright (c) 1996-2026, 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
20 140070 : brin_desc(StringInfo buf, XLogReaderState *record)
21 : {
22 140070 : char *rec = XLogRecGetData(record);
23 140070 : uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
24 :
25 140070 : info &= XLOG_BRIN_OPMASK;
26 140070 : if (info == XLOG_BRIN_CREATE_INDEX)
27 : {
28 14 : xl_brin_createidx *xlrec = (xl_brin_createidx *) rec;
29 :
30 14 : appendStringInfo(buf, "v%d pagesPerRange %u",
31 14 : xlrec->version, xlrec->pagesPerRange);
32 : }
33 140056 : else if (info == XLOG_BRIN_INSERT)
34 : {
35 14 : xl_brin_insert *xlrec = (xl_brin_insert *) rec;
36 :
37 14 : appendStringInfo(buf, "heapBlk %u pagesPerRange %u offnum %u",
38 : xlrec->heapBlk,
39 : xlrec->pagesPerRange,
40 14 : xlrec->offnum);
41 : }
42 140042 : else if (info == XLOG_BRIN_UPDATE)
43 : {
44 0 : xl_brin_update *xlrec = (xl_brin_update *) rec;
45 :
46 0 : appendStringInfo(buf, "heapBlk %u pagesPerRange %u old offnum %u, new offnum %u",
47 : xlrec->insert.heapBlk,
48 : xlrec->insert.pagesPerRange,
49 0 : xlrec->oldOffnum,
50 0 : xlrec->insert.offnum);
51 : }
52 140042 : else if (info == XLOG_BRIN_SAMEPAGE_UPDATE)
53 : {
54 140014 : xl_brin_samepage_update *xlrec = (xl_brin_samepage_update *) rec;
55 :
56 140014 : appendStringInfo(buf, "offnum %u", xlrec->offnum);
57 : }
58 28 : else if (info == XLOG_BRIN_REVMAP_EXTEND)
59 : {
60 14 : xl_brin_revmap_extend *xlrec = (xl_brin_revmap_extend *) rec;
61 :
62 14 : appendStringInfo(buf, "targetBlk %u", xlrec->targetBlk);
63 : }
64 14 : else if (info == XLOG_BRIN_DESUMMARIZE)
65 : {
66 14 : xl_brin_desummarize *xlrec = (xl_brin_desummarize *) rec;
67 :
68 14 : appendStringInfo(buf, "pagesPerRange %u, heapBlk %u, page offset %u",
69 14 : xlrec->pagesPerRange, xlrec->heapBlk, xlrec->regOffset);
70 : }
71 140070 : }
72 :
73 : const char *
74 140085 : brin_identify(uint8 info)
75 : {
76 140085 : const char *id = NULL;
77 :
78 140085 : switch (info & ~XLR_INFO_MASK)
79 : {
80 17 : case XLOG_BRIN_CREATE_INDEX:
81 17 : id = "CREATE_INDEX";
82 17 : break;
83 0 : case XLOG_BRIN_INSERT:
84 0 : id = "INSERT";
85 0 : break;
86 17 : case XLOG_BRIN_INSERT | XLOG_BRIN_INIT_PAGE:
87 17 : id = "INSERT+INIT";
88 17 : break;
89 0 : case XLOG_BRIN_UPDATE:
90 0 : id = "UPDATE";
91 0 : break;
92 0 : case XLOG_BRIN_UPDATE | XLOG_BRIN_INIT_PAGE:
93 0 : id = "UPDATE+INIT";
94 0 : break;
95 140017 : case XLOG_BRIN_SAMEPAGE_UPDATE:
96 140017 : id = "SAMEPAGE_UPDATE";
97 140017 : break;
98 17 : case XLOG_BRIN_REVMAP_EXTEND:
99 17 : id = "REVMAP_EXTEND";
100 17 : break;
101 17 : case XLOG_BRIN_DESUMMARIZE:
102 17 : id = "DESUMMARIZE";
103 17 : break;
104 : }
105 :
106 140085 : return id;
107 : }
|