163 "GiST VACUUM page set context",
172 vstate.
stats = stats;
216 if (blkno >= num_pages)
219 for (; blkno < num_pages; blkno++)
346 todelete[ntodelete++] = off;
393 if (blkno == orig_blkno)
420 (
errmsg(
"index \"%s\" contains an inner tuple marked as invalid",
422 errdetail(
"This is caused by an incomplete page split at crash recovery before upgrading to PostgreSQL 9.1."),
423 errhint(
"Please REINDEX it.")));
431 if (blkno == orig_blkno)
466 while (empty_pages_remaining > 0 &&
502 off <= maxoff && ntodelete < maxoff - 1;
512 leafs_to_delete[ntodelete] = leafblk;
513 todelete[ntodelete++] = off;
533 for (
int i = 0;
i < ntodelete;
i++)
551 buffer, todelete[i] - deleted,
565 empty_pages_remaining -= ntodelete;
#define GistFollowRight(page)
#define GistPageGetNSN(page)
void MemoryContextDelete(MemoryContext context)
#define GistPageIsDeleted(page)
XLogRecPtr GetInsertRecPtr(void)
int errhint(const char *fmt,...)
static void gistvacuum_delete_empty_pages(IndexVacuumInfo *info, GistVacState *vstate)
IndexBulkDeleteResult * gistvacuumcleanup(IndexVacuumInfo *info, IndexBulkDeleteResult *stats)
void PageIndexTupleDelete(Page page, OffsetNumber offnum)
void MarkBufferDirty(Buffer buffer)
IntegerSet * intset_create(void)
#define GistMarkTuplesDeleted(page)
IndexBulkDeleteResult * gistbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, IndexBulkDeleteCallback callback, void *callback_state)
#define RELATION_IS_LOCAL(relation)
Buffer ReadBufferExtended(Relation reln, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, BufferAccessStrategy strategy)
#define END_CRIT_SECTION()
BufferAccessStrategy strategy
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
bool intset_iterate_next(IntegerSet *intset, uint64 *next)
#define START_CRIT_SECTION()
#define GistTupleIsInvalid(itup)
void ReleaseBuffer(Buffer buffer)
static void gistvacuumpage(GistVacState *vstate, BlockNumber blkno, BlockNumber orig_blkno)
#define PageGetMaxOffsetNumber(page)
XLogRecPtr gistGetFakeLSN(Relation rel)
IndexBulkDeleteResult * stats
void intset_add_member(IntegerSet *intset, uint64 x)
void UnlockReleaseBuffer(Buffer buffer)
static void callback(struct sockaddr *addr, struct sockaddr *mask, void *unused)
static bool gistdeletepage(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, Buffer buffer, OffsetNumber downlink, Buffer leafBuffer)
#define FirstOffsetNumber
IndexTupleData * IndexTuple
int errdetail(const char *fmt,...)
#define RelationGetRelationName(relation)
MemoryContext CurrentMemoryContext
IntegerSet * empty_leaf_set
BlockNumber pages_deleted
#define BufferGetPage(buffer)
static void GistPageSetDeleted(Page page, FullTransactionId deletexid)
FullTransactionId ReadNextFullTransactionId(void)
void intset_begin_iterate(IntegerSet *intset)
#define GistPageIsLeaf(page)
#define PageGetItemId(page, offsetNumber)
void LockRelationForExtension(Relation relation, LOCKMODE lockmode)
MemoryContext GenerationContextCreate(MemoryContext parent, const char *name, Size blockSize)
void * palloc0(Size size)
void UnlockRelationForExtension(Relation relation, LOCKMODE lockmode)
MemoryContext page_set_context
void LockBuffer(Buffer buffer, int mode)
#define RelationGetNumberOfBlocks(reln)
#define InvalidOffsetNumber
XLogRecPtr gistXLogUpdate(Buffer buffer, OffsetNumber *todelete, int ntodelete, IndexTuple *itup, int ituplen, Buffer leftchildbuf)
#define ereport(elevel,...)
#define GistPageGetOpaque(page)
#define Assert(condition)
IntegerSet * internal_page_set
void IndexFreeSpaceMapVacuum(Relation rel)
void PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems)
void gistcheckpage(Relation rel, Buffer buf)
#define OffsetNumberNext(offsetNumber)
#define InvalidBlockNumber
#define RelationNeedsWAL(relation)
BlockNumber BufferGetBlockNumber(Buffer buffer)
bool gistPageRecyclable(Page page)
int errmsg(const char *fmt,...)
XLogRecPtr gistXLogPageDelete(Buffer buffer, FullTransactionId xid, Buffer parentBuffer, OffsetNumber downlinkOffset)
BlockNumber pages_newly_deleted
IndexBulkDeleteCallback callback
bool intset_is_member(IntegerSet *intset, uint64 x)
#define ItemPointerGetBlockNumber(pointer)
void vacuum_delay_point(void)
void RecordFreeIndexPage(Relation rel, BlockNumber freeBlock)
#define PageSetLSN(page, lsn)
#define PageGetItem(page, itemId)
uint64 intset_num_entries(IntegerSet *intset)
bool(* IndexBulkDeleteCallback)(ItemPointer itemptr, void *state)
static void gistvacuumscan(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, IndexBulkDeleteCallback callback, void *callback_state)