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