PostgreSQL Source Code
git master
|
#include "access/xlogdefs.h"
#include "storage/block.h"
#include "storage/item.h"
#include "storage/off.h"
Go to the source code of this file.
Data Structures | |
struct | PageXLogRecPtr |
struct | PageHeaderData |
Macros | |
#define | PageXLogRecPtrGet(val) ((uint64) (val).xlogid << 32 | (val).xrecoff) |
#define | PageXLogRecPtrSet(ptr, lsn) ((ptr).xlogid = (uint32) ((lsn) >> 32), (ptr).xrecoff = (uint32) (lsn)) |
#define | PD_HAS_FREE_LINES 0x0001 /* are there any unused line pointers? */ |
#define | PD_PAGE_FULL 0x0002 /* not enough free space for new tuple? */ |
#define | PD_ALL_VISIBLE |
#define | PD_VALID_FLAG_BITS 0x0007 /* OR of all valid pd_flags bits */ |
#define | PG_PAGE_LAYOUT_VERSION 4 |
#define | PG_DATA_CHECKSUM_VERSION 1 |
#define | PageIsValid(page) PointerIsValid(page) |
#define | SizeOfPageHeaderData (offsetof(PageHeaderData, pd_linp)) |
#define | PageIsEmpty(page) (((PageHeader) (page))->pd_lower <= SizeOfPageHeaderData) |
#define | PageIsNew(page) (((PageHeader) (page))->pd_upper == 0) |
#define | PageGetItemId(page, offsetNumber) ((ItemId) (&((PageHeader) (page))->pd_linp[(offsetNumber) - 1])) |
#define | PageGetContents(page) ((char *) (page) + MAXALIGN(SizeOfPageHeaderData)) |
#define | PageSizeIsValid(pageSize) ((pageSize) == BLCKSZ) |
#define | PageGetPageSize(page) ((Size) (((PageHeader) (page))->pd_pagesize_version & (uint16) 0xFF00)) |
#define | PageGetPageLayoutVersion(page) (((PageHeader) (page))->pd_pagesize_version & 0x00FF) |
#define | PageSetPageSizeAndVersion(page, size, version) |
#define | PageGetSpecialSize(page) ((uint16) (PageGetPageSize(page) - ((PageHeader)(page))->pd_special)) |
#define | PageGetSpecialPointer(page) |
#define | PageGetItem(page, itemId) |
#define | PageGetMaxOffsetNumber(page) |
#define | PageGetLSN(page) PageXLogRecPtrGet(((PageHeader) (page))->pd_lsn) |
#define | PageSetLSN(page, lsn) PageXLogRecPtrSet(((PageHeader) (page))->pd_lsn, lsn) |
#define | PageHasFreeLinePointers(page) (((PageHeader) (page))->pd_flags & PD_HAS_FREE_LINES) |
#define | PageSetHasFreeLinePointers(page) (((PageHeader) (page))->pd_flags |= PD_HAS_FREE_LINES) |
#define | PageClearHasFreeLinePointers(page) (((PageHeader) (page))->pd_flags &= ~PD_HAS_FREE_LINES) |
#define | PageIsFull(page) (((PageHeader) (page))->pd_flags & PD_PAGE_FULL) |
#define | PageSetFull(page) (((PageHeader) (page))->pd_flags |= PD_PAGE_FULL) |
#define | PageClearFull(page) (((PageHeader) (page))->pd_flags &= ~PD_PAGE_FULL) |
#define | PageIsAllVisible(page) (((PageHeader) (page))->pd_flags & PD_ALL_VISIBLE) |
#define | PageSetAllVisible(page) (((PageHeader) (page))->pd_flags |= PD_ALL_VISIBLE) |
#define | PageClearAllVisible(page) (((PageHeader) (page))->pd_flags &= ~PD_ALL_VISIBLE) |
#define | PageSetPrunable(page, xid) |
#define | PageClearPrunable(page) (((PageHeader) (page))->pd_prune_xid = InvalidTransactionId) |
#define | PAI_OVERWRITE (1 << 0) |
#define | PAI_IS_HEAP (1 << 1) |
#define | PIV_LOG_WARNING (1 << 0) |
#define | PIV_REPORT_STAT (1 << 1) |
#define | PageAddItem(page, item, size, offsetNumber, overwrite, is_heap) |
#define | PageIsVerified(page, blkno) |
Typedefs | |
typedef Pointer | Page |
typedef uint16 | LocationIndex |
typedef struct PageHeaderData | PageHeaderData |
typedef PageHeaderData * | PageHeader |
#define PageAddItem | ( | page, | |
item, | |||
size, | |||
offsetNumber, | |||
overwrite, | |||
is_heap | |||
) |
#define PageClearAllVisible | ( | page | ) | (((PageHeader) (page))->pd_flags &= ~PD_ALL_VISIBLE) |
#define PageClearFull | ( | page | ) | (((PageHeader) (page))->pd_flags &= ~PD_PAGE_FULL) |
#define PageClearHasFreeLinePointers | ( | page | ) | (((PageHeader) (page))->pd_flags &= ~PD_HAS_FREE_LINES) |
#define PageClearPrunable | ( | page | ) | (((PageHeader) (page))->pd_prune_xid = InvalidTransactionId) |
#define PageGetContents | ( | page | ) | ((char *) (page) + MAXALIGN(SizeOfPageHeaderData)) |
#define PageGetItem | ( | page, | |
itemId | |||
) |
#define PageGetItemId | ( | page, | |
offsetNumber | |||
) | ((ItemId) (&((PageHeader) (page))->pd_linp[(offsetNumber) - 1])) |
#define PageGetLSN | ( | page | ) | PageXLogRecPtrGet(((PageHeader) (page))->pd_lsn) |
#define PageGetMaxOffsetNumber | ( | page | ) |
#define PageGetPageLayoutVersion | ( | page | ) | (((PageHeader) (page))->pd_pagesize_version & 0x00FF) |
#define PageGetPageSize | ( | page | ) | ((Size) (((PageHeader) (page))->pd_pagesize_version & (uint16) 0xFF00)) |
#define PageGetSpecialPointer | ( | page | ) |
#define PageGetSpecialSize | ( | page | ) | ((uint16) (PageGetPageSize(page) - ((PageHeader)(page))->pd_special)) |
#define PageHasFreeLinePointers | ( | page | ) | (((PageHeader) (page))->pd_flags & PD_HAS_FREE_LINES) |
#define PageIsAllVisible | ( | page | ) | (((PageHeader) (page))->pd_flags & PD_ALL_VISIBLE) |
#define PageIsEmpty | ( | page | ) | (((PageHeader) (page))->pd_lower <= SizeOfPageHeaderData) |
#define PageIsFull | ( | page | ) | (((PageHeader) (page))->pd_flags & PD_PAGE_FULL) |
#define PageIsNew | ( | page | ) | (((PageHeader) (page))->pd_upper == 0) |
#define PageIsValid | ( | page | ) | PointerIsValid(page) |
#define PageIsVerified | ( | page, | |
blkno | |||
) |
#define PageSetAllVisible | ( | page | ) | (((PageHeader) (page))->pd_flags |= PD_ALL_VISIBLE) |
#define PageSetFull | ( | page | ) | (((PageHeader) (page))->pd_flags |= PD_PAGE_FULL) |
#define PageSetHasFreeLinePointers | ( | page | ) | (((PageHeader) (page))->pd_flags |= PD_HAS_FREE_LINES) |
#define PageSetLSN | ( | page, | |
lsn | |||
) | PageXLogRecPtrSet(((PageHeader) (page))->pd_lsn, lsn) |
#define PageSetPageSizeAndVersion | ( | page, | |
size, | |||
version | |||
) |
#define PageSetPrunable | ( | page, | |
xid | |||
) |
#define PageSizeIsValid | ( | pageSize | ) | ((pageSize) == BLCKSZ) |
#define PD_ALL_VISIBLE |
#define PD_HAS_FREE_LINES 0x0001 /* are there any unused line pointers? */ |
#define PD_PAGE_FULL 0x0002 /* not enough free space for new tuple? */ |
#define PD_VALID_FLAG_BITS 0x0007 /* OR of all valid pd_flags bits */ |
#define SizeOfPageHeaderData (offsetof(PageHeaderData, pd_linp)) |
typedef uint16 LocationIndex |
typedef PageHeaderData* PageHeader |
typedef struct PageHeaderData PageHeaderData |
OffsetNumber PageAddItemExtended | ( | Page | page, |
Item | item, | ||
Size | size, | ||
OffsetNumber | offsetNumber, | ||
int | flags | ||
) |
Definition at line 194 of file bufpage.c.
References Assert(), elog, ereport, errcode(), ERRCODE_DATA_CORRUPTED, errmsg(), FirstOffsetNumber, InvalidOffsetNumber, ItemIdHasStorage, ItemIdIsUsed, ItemIdSetNormal, lower(), MAXALIGN, MaxHeapTuplesPerPage, OffsetNumberIsValid, OffsetNumberNext, PageClearHasFreeLinePointers, PageGetItemId, PageGetMaxOffsetNumber, PageHasFreeLinePointers, PAI_IS_HEAP, PAI_OVERWRITE, PANIC, PageHeaderData::pd_lower, PageHeaderData::pd_special, PageHeaderData::pd_upper, SizeOfPageHeaderData, upper(), VALGRIND_CHECK_MEM_IS_DEFINED, and WARNING.
Definition at line 958 of file bufpage.c.
Referenced by _bt_bottomupdel_pass(), _bt_dedup_pass(), _bt_findsplitloc(), allocNewBuffer(), brin_can_do_samepage_update(), doPickSplit(), GetHashPageStats(), ginHeapTupleFastInsert(), spgAddNodeAction(), SpGistGetBuffer(), SpGistPageAddNewItem(), SpGistSetLastUsedPage(), and writeListPage().
Definition at line 907 of file bufpage.c.
Referenced by _bt_buildadd(), _bt_delete_or_dedup_one_page(), _bt_findinsertloc(), _bt_insertonpg(), _bt_search_insert(), _hash_doinsert(), br_page_get_freespace(), entryIsEnoughSpace(), GetBTPageStatistics(), GetHashPageStatistics(), gist_indexsortbuild_levelstate_add(), gistnospace(), heap_xlog_visible(), PageGetHeapFreeSpace(), pgstat_index_page(), pgstatindex_impl(), and terminate_brin_buildstate().
Definition at line 934 of file bufpage.c.
Referenced by _hash_splitbucket(), and _hash_squeezebucket().
Definition at line 991 of file bufpage.c.
References FirstOffsetNumber, ItemIdIsUsed, MaxHeapTuplesPerPage, OffsetNumberNext, PageGetFreeSpace(), PageGetItemId, PageGetMaxOffsetNumber, and PageHasFreeLinePointers.
Referenced by heap_multi_insert(), heap_page_prune_opt(), heap_update(), heap_xlog_insert(), heap_xlog_multi_insert(), heap_xlog_prune(), heap_xlog_update(), heap_xlog_vacuum(), lazy_scan_heap(), lazy_scan_new_or_empty(), lazy_vacuum_heap_rel(), pgstat_heap(), raw_heap_insert(), RelationGetBufferForTuple(), and statapprox_heap().
Definition at line 365 of file bufpage.c.
References PageGetPageSize, and palloc().
Referenced by _bt_split(), dataSplitPageInternal(), and ginPlaceToPage().
Definition at line 382 of file bufpage.c.
References PageGetPageSize, and palloc().
Referenced by entrySplitPage(), and ginVacuumEntryPage().
Definition at line 402 of file bufpage.c.
References PageGetPageSize, PageGetSpecialPointer, PageGetSpecialSize, PageInit(), and palloc().
Referenced by _bt_dedup_pass(), btree_xlog_dedup(), btree_xlog_split(), and gistplacetopage().
void PageIndexMultiDelete | ( | Page | page, |
OffsetNumber * | itemnos, | ||
int | nitems | ||
) |
Definition at line 1161 of file bufpage.c.
References itemIdCompactData::alignedlen, Assert(), compactify_tuples(), elog, ereport, errcode(), ERRCODE_DATA_CORRUPTED, errmsg(), ERROR, FirstOffsetNumber, ItemIdGetLength, ItemIdGetOffset, ItemIdHasStorage, itemIdCompactData::itemoff, MAXALIGN, MaxIndexTuplesPerPage, itemIdCompactData::offsetindex, OffsetNumberNext, PageGetItemId, PageGetMaxOffsetNumber, PageIndexTupleDelete(), PageHeaderData::pd_linp, PageHeaderData::pd_lower, PageHeaderData::pd_special, PageHeaderData::pd_upper, and SizeOfPageHeaderData.
Referenced by _bt_delitems_delete(), _bt_delitems_vacuum(), _hash_squeezebucket(), _hash_vacuum_one_page(), btree_xlog_delete(), btree_xlog_vacuum(), gistprunepage(), gistRedoDeleteRecord(), gistRedoPageUpdateRecord(), gistvacuumpage(), hash_xlog_delete(), hash_xlog_move_page_contents(), hash_xlog_vacuum_one_page(), hashbucketcleanup(), spgPageIndexMultiDelete(), spgRedoVacuumRedirect(), spgRedoVacuumRoot(), vacuumLeafRoot(), and vacuumRedirectAndPlaceholder().
void PageIndexTupleDelete | ( | Page | page, |
OffsetNumber | offset | ||
) |
Definition at line 1052 of file bufpage.c.
References Assert(), elog, ereport, errcode(), ERRCODE_DATA_CORRUPTED, errmsg(), ERROR, i, if(), ItemIdGetLength, ItemIdGetOffset, ItemIdHasStorage, ItemIdData::lp_off, MAXALIGN, PageGetItemId, PageGetMaxOffsetNumber, PageIsEmpty, PageHeaderData::pd_linp, PageHeaderData::pd_lower, PageHeaderData::pd_special, PageHeaderData::pd_upper, and SizeOfPageHeaderData.
Referenced by _bt_mark_page_halfdead(), addLeafTuple(), addOrReplaceTuple(), btree_xlog_mark_page_halfdead(), entryPreparePage(), ginRedoInsertEntry(), ginVacuumEntryPage(), gistdeletepage(), gistplacetopage(), gistRedoPageDelete(), PageIndexMultiDelete(), spgAddNodeAction(), SpGistPageAddNewItem(), spgRedoAddLeaf(), spgRedoAddNode(), spgRedoSplitTuple(), and spgSplitNodeAction().
void PageIndexTupleDeleteNoCompact | ( | Page | page, |
OffsetNumber | offset | ||
) |
Definition at line 1295 of file bufpage.c.
References Assert(), elog, ereport, errcode(), ERRCODE_DATA_CORRUPTED, errmsg(), ERROR, i, if(), ItemIdGetLength, ItemIdGetOffset, ItemIdHasStorage, ItemIdSetUnused, ItemIdData::lp_off, MAXALIGN, PageGetItemId, PageGetMaxOffsetNumber, PageIsEmpty, PageHeaderData::pd_lower, PageHeaderData::pd_special, PageHeaderData::pd_upper, and SizeOfPageHeaderData.
Referenced by brin_doupdate(), brin_xlog_desummarize_page(), brin_xlog_update(), and brinRevmapDesummarizeRange().
bool PageIndexTupleOverwrite | ( | Page | page, |
OffsetNumber | offnum, | ||
Item | newtup, | ||
Size | newsize | ||
) |
Definition at line 1405 of file bufpage.c.
References Assert(), elog, ereport, errcode(), ERRCODE_DATA_CORRUPTED, errmsg(), ERROR, FirstOffsetNumber, i, ItemIdGetLength, ItemIdGetOffset, ItemIdHasStorage, ItemIdData::lp_len, ItemIdData::lp_off, MAXALIGN, PageGetItem, PageGetItemId, PageGetMaxOffsetNumber, PageHeaderData::pd_lower, PageHeaderData::pd_special, PageHeaderData::pd_upper, and SizeOfPageHeaderData.
Referenced by _bt_buildadd(), _bt_delitems_delete(), _bt_delitems_vacuum(), _bt_mark_page_halfdead(), brin_doupdate(), brin_xlog_samepage_update(), btree_xlog_updates(), gistplacetopage(), and gistRedoPageUpdateRecord().
Definition at line 42 of file bufpage.c.
References Assert(), MAXALIGN, MemSet, PageSetPageSizeAndVersion, PageHeaderData::pd_flags, PageHeaderData::pd_lower, PageHeaderData::pd_special, PageHeaderData::pd_upper, PG_PAGE_LAYOUT_VERSION, and SizeOfPageHeaderData.
Referenced by _bt_pageinit(), _hash_pageinit(), BloomInitPage(), brin_page_init(), fill_seq_fork_with_data(), fsm_extend(), fsm_readbuf(), GinInitPage(), gistinitpage(), heap_xlog_insert(), heap_xlog_multi_insert(), heap_xlog_update(), heap_xlog_visible(), PageGetTempPageCopySpecial(), raw_heap_insert(), RelationGetBufferForTuple(), seq_redo(), SpGistInitPage(), vm_extend(), vm_readbuf(), and XLogRecordPageWithFreeSpace().
bool PageIsVerifiedExtended | ( | Page | page, |
BlockNumber | blkno, | ||
int | flags | ||
) |
Definition at line 88 of file bufpage.c.
References checksum_failure, DataChecksumsEnabled(), ereport, errcode(), ERRCODE_DATA_CORRUPTED, errmsg(), i, ignore_checksum_failure, MAXALIGN, PageIsNew, PageHeaderData::pd_checksum, PageHeaderData::pd_flags, PageHeaderData::pd_lower, PageHeaderData::pd_special, PageHeaderData::pd_upper, PD_VALID_FLAG_BITS, pg_checksum_page(), pgstat_report_checksum_failure(), PIV_LOG_WARNING, PIV_REPORT_STAT, and WARNING.
Referenced by ReadBuffer_common(), and RelationCopyStorage().
void PageRepairFragmentation | ( | Page | page | ) |
Definition at line 699 of file bufpage.c.
References itemIdCompactData::alignedlen, Assert(), compactify_tuples(), ereport, errcode(), ERRCODE_DATA_CORRUPTED, errmsg(), ERROR, FirstOffsetNumber, i, InvalidOffsetNumber, ItemIdGetLength, ItemIdGetOffset, ItemIdHasStorage, ItemIdIsUsed, ItemIdSetUnused, itemIdCompactData::itemoff, MAXALIGN, MaxHeapTuplesPerPage, itemIdCompactData::offsetindex, PageClearHasFreeLinePointers, PageGetItemId, PageGetMaxOffsetNumber, PageSetHasFreeLinePointers, SizeOfPageHeaderData, and unlikely.
Referenced by heap_page_prune_execute().
Definition at line 424 of file bufpage.c.
References PageGetPageSize, and pfree().
Referenced by _bt_dedup_pass(), _bt_split(), btree_xlog_dedup(), btree_xlog_split(), createPostingTree(), ginbulkdelete(), and gistplacetopage().
char* PageSetChecksumCopy | ( | Page | page, |
BlockNumber | blkno | ||
) |
Definition at line 1510 of file bufpage.c.
References DataChecksumsEnabled(), MemoryContextAlloc(), PageIsNew, pg_checksum_page(), and TopMemoryContext.
Referenced by FlushBuffer().
void PageSetChecksumInplace | ( | Page | page, |
BlockNumber | blkno | ||
) |
Definition at line 1539 of file bufpage.c.
References DataChecksumsEnabled(), PageIsNew, and pg_checksum_page().
Referenced by _bt_blwritepage(), _hash_alloc_buckets(), blbuildempty(), btbuildempty(), end_heap_rewrite(), FlushRelationBuffers(), fsm_extend(), gist_indexsortbuild(), gist_indexsortbuild_flush_ready_pages(), LocalBufferAlloc(), raw_heap_insert(), RelationCopyStorage(), spgbuildempty(), and vm_extend().
void PageTruncateLinePointerArray | ( | Page | page | ) |
Definition at line 835 of file bufpage.c.
References Assert(), FirstOffsetNumber, i, ItemIdIsUsed, PageClearHasFreeLinePointers, PageGetItemId, PageGetMaxOffsetNumber, PageSetHasFreeLinePointers, and PageHeaderData::pd_lower.
Referenced by heap_xlog_vacuum(), and lazy_vacuum_heap_page().
Definition at line 312 of file bufpage.h.
References Assert(), PageIsValid, and SizeOfPageHeaderData.
StaticAssertDecl | ( | BLCKSZ | = =((BLCKSZ/sizeof(size_t)) *sizeof(size_t)) , |
"BLCKSZ has to be a multiple of sizeof(size_t)" | |||
) |