28#define BrinMaxItemSize \
29 MAXALIGN_DOWN(BLCKSZ - \
30 (MAXALIGN(SizeOfPageHeaderData + \
31 sizeof(ItemIdData)) + \
32 MAXALIGN(sizeof(BrinSpecialSpace))))
75 errmsg(
"index row size %zu exceeds maximum %zu for index \"%s\"",
180 elog(
ERROR,
"failed to replace BRIN tuple");
255 elog(
ERROR,
"failed to add BRIN tuple to new page");
277 xlrec.insert.heapBlk = heapBlk;
278 xlrec.insert.pagesPerRange = pagesPerRange;
360 errmsg(
"index row size %zu exceeds maximum %zu for index \"%s\"",
412 elog(
ERROR,
"failed to add BRIN tuple to new page");
432 xlrec.pagesPerRange = pagesPerRange;
813 freespace = *extended ?
815 if (freespace >= itemsz)
849 errmsg(
"index row size %zu exceeds maximum %zu for index \"%s\"",
887 "brin_initialize_empty_new_buffer: initializing blank page %u",
#define InvalidBlockNumber
#define BRIN_IS_META_PAGE(page)
#define BrinPageFlags(page)
#define BRIN_EVACUATE_PAGE
#define BRIN_PAGETYPE_REGULAR
#define BRIN_PAGETYPE_META
#define BRIN_IS_REVMAP_PAGE(page)
#define BrinPageType(page)
#define BRIN_IS_REGULAR_PAGE(page)
void brin_evacuate_page(Relation idxRel, BlockNumber pagesPerRange, BrinRevmap *revmap, Buffer buf)
bool brin_start_evacuating_page(Relation idxRel, Buffer buf)
bool brin_doupdate(Relation idxrel, BlockNumber pagesPerRange, BrinRevmap *revmap, BlockNumber heapBlk, Buffer oldbuf, OffsetNumber oldoff, const BrinTuple *origtup, Size origsz, const BrinTuple *newtup, Size newsz, bool samepage)
static void brin_initialize_empty_new_buffer(Relation idxrel, Buffer buffer)
void brin_page_cleanup(Relation idxrel, Buffer buf)
OffsetNumber brin_doinsert(Relation idxrel, BlockNumber pagesPerRange, BrinRevmap *revmap, Buffer *buffer, BlockNumber heapBlk, const BrinTuple *tup, Size itemsz)
void brin_page_init(Page page, uint16 type)
static Size br_page_get_freespace(Page page)
static Buffer brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz, bool *extended)
void brin_metapage_init(Page page, BlockNumber pagesPerRange, uint16 version)
bool brin_can_do_samepage_update(Buffer buffer, Size origsz, Size newsz)
void brinRevmapExtend(BrinRevmap *revmap, BlockNumber heapBlk)
void brinSetHeapBlockItemptr(Buffer buf, BlockNumber pagesPerRange, BlockNumber heapBlk, ItemPointerData tid)
Buffer brinLockRevmapPageForUpdate(BrinRevmap *revmap, BlockNumber heapBlk)
BrinTuple * brin_copy_tuple(BrinTuple *tuple, Size len, BrinTuple *dest, Size *destsz)
bool brin_tuples_equal(const BrinTuple *a, Size alen, const BrinTuple *b, Size blen)
#define XLOG_BRIN_SAMEPAGE_UPDATE
#define SizeOfBrinSamepageUpdate
#define XLOG_BRIN_INIT_PAGE
BlockNumber BufferGetBlockNumber(Buffer buffer)
void ReleaseBuffer(Buffer buffer)
void UnlockReleaseBuffer(Buffer buffer)
void MarkBufferDirty(Buffer buffer)
void MarkBufferDirtyHint(Buffer buffer, bool buffer_std)
Buffer ReadBuffer(Relation reln, BlockNumber blockNum)
static Page BufferGetPage(Buffer buffer)
static void LockBuffer(Buffer buffer, BufferLockMode mode)
static bool BufferIsValid(Buffer bufnum)
Size PageGetFreeSpace(const PageData *page)
bool PageIndexTupleOverwrite(Page page, OffsetNumber offnum, const void *newtup, Size newsize)
Size PageGetExactFreeSpace(const PageData *page)
void PageInit(Page page, Size pageSize, Size specialSize)
void PageIndexTupleDeleteNoCompact(Page page, OffsetNumber offnum)
PageHeaderData * PageHeader
static bool PageIsNew(const PageData *page)
static char * PageGetContents(Page page)
static ItemId PageGetItemId(Page page, OffsetNumber offsetNumber)
static void * PageGetItem(PageData *page, const ItemIdData *itemId)
static void PageSetLSN(Page page, XLogRecPtr lsn)
#define PageAddItem(page, item, size, offsetNumber, overwrite, is_heap)
static OffsetNumber PageGetMaxOffsetNumber(const PageData *page)
#define Assert(condition)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
void FreeSpaceMapVacuumRange(Relation rel, BlockNumber start, BlockNumber end)
BlockNumber RecordAndGetPageWithFreeSpace(Relation rel, BlockNumber oldPage, Size oldSpaceAvail, Size spaceNeeded)
void RecordPageWithFreeSpace(Relation rel, BlockNumber heapBlk, Size spaceAvail)
BlockNumber GetPageWithFreeSpace(Relation rel, Size spaceNeeded)
#define ItemIdGetLength(itemId)
#define ItemIdIsNormal(itemId)
#define ItemIdIsUsed(itemId)
static void ItemPointerSet(ItemPointerData *pointer, BlockNumber blockNumber, OffsetNumber offNum)
void LockRelationForExtension(Relation relation, LOCKMODE lockmode)
void UnlockRelationForExtension(Relation relation, LOCKMODE lockmode)
#define START_CRIT_SECTION()
#define CHECK_FOR_INTERRUPTS()
#define END_CRIT_SECTION()
#define InvalidOffsetNumber
#define FirstOffsetNumber
static char buf[DEFAULT_XLOG_SEG_SIZE]
#define RELATION_IS_LOCAL(relation)
#define RelationGetRelationName(relation)
#define RelationGetTargetBlock(relation)
#define RelationNeedsWAL(relation)
#define RelationSetTargetBlock(relation, targblock)
BlockNumber lastRevmapPage
BlockNumber pagesPerRange
XLogRecPtr XLogInsert(RmgrId rmid, uint8 info)
void XLogRegisterBufData(uint8 block_id, const void *data, uint32 len)
void XLogRegisterData(const void *data, uint32 len)
XLogRecPtr log_newpage_buffer(Buffer buffer, bool page_std)
void XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags)
void XLogBeginInsert(void)