Line data Source code
1 : /*------------------------------------------------------------------------- 2 : * 3 : * brindesc.c 4 : * rmgr descriptor routines for BRIN indexes 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/brindesc.c 12 : * 13 : *------------------------------------------------------------------------- 14 : */ 15 : #include "postgres.h" 16 : 17 : #include "access/brin_xlog.h" 18 : 19 : void 20 120060 : brin_desc(StringInfo buf, XLogReaderState *record) 21 : { 22 120060 : char *rec = XLogRecGetData(record); 23 120060 : uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK; 24 : 25 120060 : info &= XLOG_BRIN_OPMASK; 26 120060 : if (info == XLOG_BRIN_CREATE_INDEX) 27 : { 28 12 : xl_brin_createidx *xlrec = (xl_brin_createidx *) rec; 29 : 30 12 : appendStringInfo(buf, "v%d pagesPerRange %u", 31 12 : xlrec->version, xlrec->pagesPerRange); 32 : } 33 120048 : else if (info == XLOG_BRIN_INSERT) 34 : { 35 12 : xl_brin_insert *xlrec = (xl_brin_insert *) rec; 36 : 37 12 : appendStringInfo(buf, "heapBlk %u pagesPerRange %u offnum %u", 38 : xlrec->heapBlk, 39 : xlrec->pagesPerRange, 40 12 : xlrec->offnum); 41 : } 42 120036 : 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 120036 : else if (info == XLOG_BRIN_SAMEPAGE_UPDATE) 53 : { 54 120012 : xl_brin_samepage_update *xlrec = (xl_brin_samepage_update *) rec; 55 : 56 120012 : appendStringInfo(buf, "offnum %u", xlrec->offnum); 57 : } 58 24 : else if (info == XLOG_BRIN_REVMAP_EXTEND) 59 : { 60 12 : xl_brin_revmap_extend *xlrec = (xl_brin_revmap_extend *) rec; 61 : 62 12 : appendStringInfo(buf, "targetBlk %u", xlrec->targetBlk); 63 : } 64 12 : else if (info == XLOG_BRIN_DESUMMARIZE) 65 : { 66 12 : xl_brin_desummarize *xlrec = (xl_brin_desummarize *) rec; 67 : 68 12 : appendStringInfo(buf, "pagesPerRange %u, heapBlk %u, page offset %u", 69 12 : xlrec->pagesPerRange, xlrec->heapBlk, xlrec->regOffset); 70 : } 71 120060 : } 72 : 73 : const char * 74 120070 : brin_identify(uint8 info) 75 : { 76 120070 : const char *id = NULL; 77 : 78 120070 : switch (info & ~XLR_INFO_MASK) 79 : { 80 14 : case XLOG_BRIN_CREATE_INDEX: 81 14 : id = "CREATE_INDEX"; 82 14 : break; 83 0 : case XLOG_BRIN_INSERT: 84 0 : id = "INSERT"; 85 0 : break; 86 14 : case XLOG_BRIN_INSERT | XLOG_BRIN_INIT_PAGE: 87 14 : id = "INSERT+INIT"; 88 14 : 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 120014 : case XLOG_BRIN_SAMEPAGE_UPDATE: 96 120014 : id = "SAMEPAGE_UPDATE"; 97 120014 : break; 98 14 : case XLOG_BRIN_REVMAP_EXTEND: 99 14 : id = "REVMAP_EXTEND"; 100 14 : break; 101 14 : case XLOG_BRIN_DESUMMARIZE: 102 14 : id = "DESUMMARIZE"; 103 14 : break; 104 : } 105 : 106 120070 : return id; 107 : }