29 #define BrinMaxItemSize \ 30 MAXALIGN_DOWN(BLCKSZ - \ 31 (MAXALIGN(SizeOfPageHeaderData + \ 32 sizeof(ItemIdData)) + \ 33 MAXALIGN(sizeof(BrinSpecialSpace)))) 75 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
76 errmsg(
"index row size %zu exceeds maximum %zu for index \"%s\"",
181 elog(
ERROR,
"failed to replace BRIN tuple");
257 elog(
ERROR,
"failed to add BRIN tuple to new page");
327 ((newsz <= origsz) ||
361 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
362 errmsg(
"index row size %zu exceeds maximum %zu for index \"%s\"",
415 elog(
ERROR,
"failed to add BRIN tuple to new page");
592 buf, off, tup, sz, tup, sz,
false))
716 bool extensionLockHeld =
false;
732 extensionLockHeld =
true;
741 else if (newblk == oldblk)
778 if (extensionLockHeld)
796 if (extensionLockHeld)
807 freespace = *extended ?
809 if (freespace >= itemsz)
842 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
843 errmsg(
"index row size %zu exceeds maximum %zu for index \"%s\"",
848 if (newblk != oldblk)
881 "brin_initialize_empty_new_buffer: initializing blank page %u",
void XLogRegisterBufData(uint8 block_id, char *data, int len)
#define BUFFER_LOCK_UNLOCK
XLogRecPtr log_newpage_buffer(Buffer buffer, bool page_std)
BrinTuple * brin_copy_tuple(BrinTuple *tuple, Size len, BrinTuple *dest, Size *destsz)
void RecordPageWithFreeSpace(Relation rel, BlockNumber heapBlk, Size spaceAvail)
void MarkBufferDirtyHint(Buffer buffer, bool buffer_std)
void MarkBufferDirty(Buffer buffer)
void XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags)
#define RELATION_IS_LOCAL(relation)
#define END_CRIT_SECTION()
#define ItemIdIsUsed(itemId)
Buffer brinLockRevmapPageForUpdate(BrinRevmap *revmap, BlockNumber heapBlk)
#define START_CRIT_SECTION()
int errcode(int sqlerrcode)
#define PageAddItem(page, item, size, offsetNumber, overwrite, is_heap)
#define BRIN_IS_REGULAR_PAGE(page)
void ReleaseBuffer(Buffer buffer)
#define BUFFER_LOCK_EXCLUSIVE
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)
#define PageGetMaxOffsetNumber(page)
#define RelationGetTargetBlock(relation)
Size PageGetFreeSpace(Page page)
void brin_page_cleanup(Relation idxrel, Buffer buf)
OffsetNumber brin_doinsert(Relation idxrel, BlockNumber pagesPerRange, BrinRevmap *revmap, Buffer *buffer, BlockNumber heapBlk, BrinTuple *tup, Size itemsz)
#define ItemIdGetLength(itemId)
void brin_metapage_init(Page page, BlockNumber pagesPerRange, uint16 version)
void UnlockReleaseBuffer(Buffer buffer)
#define BRIN_PAGETYPE_META
#define BRIN_PAGETYPE_REGULAR
void brinRevmapExtend(BrinRevmap *revmap, BlockNumber heapBlk)
bool PageIndexTupleOverwrite(Page page, OffsetNumber offnum, Item newtup, Size newsize)
bool brin_tuples_equal(const BrinTuple *a, Size alen, const BrinTuple *b, Size blen)
BlockNumber pagesPerRange
#define FirstOffsetNumber
static Size br_page_get_freespace(Page page)
#define RelationGetRelationName(relation)
#define BufferGetPage(buffer)
bool brin_can_do_samepage_update(Buffer buffer, Size origsz, Size newsz)
#define unconstify(underlying_type, expr)
#define PageGetItemId(page, offsetNumber)
void LockRelationForExtension(Relation relation, LOCKMODE lockmode)
BlockNumber lastRevmapPage
void XLogRegisterData(char *data, int len)
#define XLOG_BRIN_INIT_PAGE
XLogRecPtr XLogInsert(RmgrId rmid, uint8 info)
#define BRIN_IS_META_PAGE(page)
void UnlockRelationForExtension(Relation relation, LOCKMODE lockmode)
#define PageGetContents(page)
void LockBuffer(Buffer buffer, int mode)
#define InvalidOffsetNumber
#define ereport(elevel,...)
BlockNumber pagesPerRange
void PageIndexTupleDeleteNoCompact(Page page, OffsetNumber offnum)
PageHeaderData * PageHeader
#define Assert(condition)
#define ItemIdIsNormal(itemId)
#define SizeOfBrinSamepageUpdate
Buffer ReadBuffer(Relation reln, BlockNumber blockNum)
#define BRIN_IS_REVMAP_PAGE(page)
#define RelationSetTargetBlock(relation, targblock)
#define XLOG_BRIN_SAMEPAGE_UPDATE
void brin_evacuate_page(Relation idxRel, BlockNumber pagesPerRange, BrinRevmap *revmap, Buffer buf)
#define InvalidBlockNumber
static void brin_initialize_empty_new_buffer(Relation idxrel, Buffer buffer)
#define BufferIsValid(bufnum)
#define RelationNeedsWAL(relation)
#define BrinPageType(page)
Size PageGetExactFreeSpace(Page page)
BlockNumber BufferGetBlockNumber(Buffer buffer)
int errmsg(const char *fmt,...)
#define BUFFER_LOCK_SHARE
BlockNumber GetPageWithFreeSpace(Relation rel, Size spaceNeeded)
#define CHECK_FOR_INTERRUPTS()
static Buffer brin_getinsertbuffer(Relation irel, Buffer oldbuf, Size itemsz, bool *extended)
#define BRIN_EVACUATE_PAGE
bool brin_start_evacuating_page(Relation idxRel, Buffer buf)
BlockNumber RecordAndGetPageWithFreeSpace(Relation rel, BlockNumber oldPage, Size oldSpaceAvail, Size spaceNeeded)
#define BrinPageFlags(page)
void brinSetHeapBlockItemptr(Buffer buf, BlockNumber pagesPerRange, BlockNumber heapBlk, ItemPointerData tid)
void XLogBeginInsert(void)
#define PageSetLSN(page, lsn)
void FreeSpaceMapVacuumRange(Relation rel, BlockNumber start, BlockNumber end)
#define PageGetItem(page, itemId)
#define ItemPointerSet(pointer, blockNumber, offNum)
void brin_page_init(Page page, uint16 type)
void PageInit(Page page, Size pageSize, Size specialSize)