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 60030 : brin_desc(StringInfo buf, XLogReaderState *record)
21 : {
22 60030 : char *rec = XLogRecGetData(record);
23 60030 : uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
24 :
25 60030 : info &= XLOG_BRIN_OPMASK;
26 60030 : if (info == XLOG_BRIN_CREATE_INDEX)
27 : {
28 6 : xl_brin_createidx *xlrec = (xl_brin_createidx *) rec;
29 :
30 6 : appendStringInfo(buf, "v%d pagesPerRange %u",
31 6 : xlrec->version, xlrec->pagesPerRange);
32 : }
33 60024 : else if (info == XLOG_BRIN_INSERT)
34 : {
35 6 : xl_brin_insert *xlrec = (xl_brin_insert *) rec;
36 :
37 6 : appendStringInfo(buf, "heapBlk %u pagesPerRange %u offnum %u",
38 : xlrec->heapBlk,
39 : xlrec->pagesPerRange,
40 6 : xlrec->offnum);
41 : }
42 60018 : 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 60018 : else if (info == XLOG_BRIN_SAMEPAGE_UPDATE)
53 : {
54 60006 : xl_brin_samepage_update *xlrec = (xl_brin_samepage_update *) rec;
55 :
56 60006 : appendStringInfo(buf, "offnum %u", xlrec->offnum);
57 : }
58 12 : else if (info == XLOG_BRIN_REVMAP_EXTEND)
59 : {
60 6 : xl_brin_revmap_extend *xlrec = (xl_brin_revmap_extend *) rec;
61 :
62 6 : appendStringInfo(buf, "targetBlk %u", xlrec->targetBlk);
63 : }
64 6 : else if (info == XLOG_BRIN_DESUMMARIZE)
65 : {
66 6 : xl_brin_desummarize *xlrec = (xl_brin_desummarize *) rec;
67 :
68 6 : appendStringInfo(buf, "pagesPerRange %u, heapBlk %u, page offset %u",
69 6 : xlrec->pagesPerRange, xlrec->heapBlk, xlrec->regOffset);
70 : }
71 60030 : }
72 :
73 : const char *
74 60035 : brin_identify(uint8 info)
75 : {
76 60035 : const char *id = NULL;
77 :
78 60035 : switch (info & ~XLR_INFO_MASK)
79 : {
80 7 : case XLOG_BRIN_CREATE_INDEX:
81 7 : id = "CREATE_INDEX";
82 7 : break;
83 0 : case XLOG_BRIN_INSERT:
84 0 : id = "INSERT";
85 0 : break;
86 7 : case XLOG_BRIN_INSERT | XLOG_BRIN_INIT_PAGE:
87 7 : id = "INSERT+INIT";
88 7 : 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 60007 : case XLOG_BRIN_SAMEPAGE_UPDATE:
96 60007 : id = "SAMEPAGE_UPDATE";
97 60007 : break;
98 7 : case XLOG_BRIN_REVMAP_EXTEND:
99 7 : id = "REVMAP_EXTEND";
100 7 : break;
101 7 : case XLOG_BRIN_DESUMMARIZE:
102 7 : id = "DESUMMARIZE";
103 7 : break;
104 : }
105 :
106 60035 : return id;
107 : }
|