168 "GiST VACUUM page set context",
179 vstate.
stats = stats;
388 todelete[ntodelete++] = off;
435 if (blkno == orig_blkno)
462 (
errmsg(
"index \"%s\" contains an inner tuple marked as invalid",
464 errdetail(
"This is caused by an incomplete page split at crash recovery before upgrading to PostgreSQL 9.1."),
465 errhint(
"Please REINDEX it.")));
473 if (blkno == orig_blkno)
514 while (empty_pages_remaining > 0 &&
550 off <= maxoff && ntodelete < maxoff - 1;
560 leafs_to_delete[ntodelete] = leafblk;
561 todelete[ntodelete++] = off;
581 for (
int i = 0;
i < ntodelete;
i++)
599 buffer, todelete[
i] - deleted,
613 empty_pages_remaining -= ntodelete;
#define InvalidBlockNumber
BlockNumber BufferGetBlockNumber(Buffer buffer)
void ReleaseBuffer(Buffer buffer)
void UnlockReleaseBuffer(Buffer buffer)
void MarkBufferDirty(Buffer buffer)
void LockBuffer(Buffer buffer, int mode)
Buffer ReadBufferExtended(Relation reln, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, BufferAccessStrategy strategy)
#define RelationGetNumberOfBlocks(reln)
static Page BufferGetPage(Buffer buffer)
static bool BufferIsValid(Buffer bufnum)
void PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems)
void PageIndexTupleDelete(Page page, OffsetNumber offnum)
static Item PageGetItem(const PageData *page, const ItemIdData *itemId)
static bool PageIsNew(const PageData *page)
static ItemId PageGetItemId(Page page, OffsetNumber offsetNumber)
static void PageSetLSN(Page page, XLogRecPtr lsn)
static OffsetNumber PageGetMaxOffsetNumber(const PageData *page)
int errdetail(const char *fmt,...)
int errhint(const char *fmt,...)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
bool(* IndexBulkDeleteCallback)(ItemPointer itemptr, void *state)
MemoryContext GenerationContextCreate(MemoryContext parent, const char *name, Size minContextSize, Size initBlockSize, Size maxBlockSize)
#define GistPageIsLeaf(page)
static void GistPageSetDeleted(Page page, FullTransactionId deletexid)
#define GistMarkTuplesDeleted(page)
#define GistFollowRight(page)
#define GistPageIsDeleted(page)
#define GistPageGetOpaque(page)
#define GistPageGetNSN(page)
#define GistTupleIsInvalid(itup)
bool gistPageRecyclable(Page page)
XLogRecPtr gistGetFakeLSN(Relation rel)
void gistcheckpage(Relation rel, Buffer buf)
static void gistvacuumscan(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, IndexBulkDeleteCallback callback, void *callback_state)
static void gistvacuumpage(GistVacState *vstate, Buffer buffer)
IndexBulkDeleteResult * gistvacuumcleanup(IndexVacuumInfo *info, IndexBulkDeleteResult *stats)
static bool gistdeletepage(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, Buffer parentBuffer, OffsetNumber downlink, Buffer leafBuffer)
static void gistvacuum_delete_empty_pages(IndexVacuumInfo *info, GistVacState *vstate)
IndexBulkDeleteResult * gistbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, IndexBulkDeleteCallback callback, void *callback_state)
XLogRecPtr gistXLogPageDelete(Buffer buffer, FullTransactionId xid, Buffer parentBuffer, OffsetNumber downlinkOffset)
XLogRecPtr gistXLogUpdate(Buffer buffer, OffsetNumber *todelete, int ntodelete, IndexTuple *itup, int ituplen, Buffer leftchildbuf)
Assert(PointerIsAligned(start, uint64))
void IndexFreeSpaceMapVacuum(Relation rel)
void RecordFreeIndexPage(Relation rel, BlockNumber freeBlock)
uint64 intset_num_entries(IntegerSet *intset)
bool intset_is_member(IntegerSet *intset, uint64 x)
void intset_begin_iterate(IntegerSet *intset)
bool intset_iterate_next(IntegerSet *intset, uint64 *next)
IntegerSet * intset_create(void)
void intset_add_member(IntegerSet *intset, uint64 x)
static BlockNumber ItemPointerGetBlockNumber(const ItemPointerData *pointer)
IndexTupleData * IndexTuple
void LockRelationForExtension(Relation relation, LOCKMODE lockmode)
void UnlockRelationForExtension(Relation relation, LOCKMODE lockmode)
void * palloc0(Size size)
MemoryContext CurrentMemoryContext
void MemoryContextDelete(MemoryContext context)
#define START_CRIT_SECTION()
#define END_CRIT_SECTION()
#define InvalidOffsetNumber
#define OffsetNumberNext(offsetNumber)
#define FirstOffsetNumber
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
void read_stream_reset(ReadStream *stream)
Buffer read_stream_next_buffer(ReadStream *stream, void **per_buffer_data)
ReadStream * read_stream_begin_relation(int flags, BufferAccessStrategy strategy, Relation rel, ForkNumber forknum, ReadStreamBlockNumberCB callback, void *callback_private_data, size_t per_buffer_data_size)
void read_stream_end(ReadStream *stream)
BlockNumber block_range_read_stream_cb(ReadStream *stream, void *callback_private_data, void *per_buffer_data)
#define READ_STREAM_USE_BATCHING
#define RELATION_IS_LOCAL(relation)
#define RelationGetRelationName(relation)
#define RelationNeedsWAL(relation)
BlockNumber last_exclusive
BlockNumber current_blocknum
MemoryContext page_set_context
IndexBulkDeleteCallback callback
IndexBulkDeleteResult * stats
IntegerSet * empty_leaf_set
IntegerSet * internal_page_set
BlockNumber pages_deleted
BlockNumber pages_newly_deleted
BufferAccessStrategy strategy
static void callback(struct sockaddr *addr, struct sockaddr *mask, void *unused)
void vacuum_delay_point(bool is_analyze)
FullTransactionId ReadNextFullTransactionId(void)
XLogRecPtr GetInsertRecPtr(void)