mirror of
https://github.com/postgres/postgres.git
synced 2025-06-20 15:22:23 +03:00
pageinspect: Support hash indexes.
Patch by Jesper Pedersen and Ashutosh Sharma, with some error handling improvements by me. Tests from Peter Eisentraut. Reviewed by Álvaro Herrera, Michael Paquier, Jesper Pedersen, Jeff Janes, Peter Eisentraut, Amit Kapila, Mithun Cy, and me. Discussion: http://postgr.es/m/e2ac6c58-b93f-9dd9-f4e6-d6d30add7fdf@redhat.com
This commit is contained in:
@ -52,10 +52,12 @@ bitno_to_blkno(HashMetaPage metap, uint32 ovflbitnum)
|
||||
}
|
||||
|
||||
/*
|
||||
* _hash_ovflblkno_to_bitno
|
||||
*
|
||||
* Convert overflow page block number to bit number for free-page bitmap.
|
||||
*/
|
||||
static uint32
|
||||
blkno_to_bitno(HashMetaPage metap, BlockNumber ovflblkno)
|
||||
uint32
|
||||
_hash_ovflblkno_to_bitno(HashMetaPage metap, BlockNumber ovflblkno)
|
||||
{
|
||||
uint32 splitnum = metap->hashm_ovflpoint;
|
||||
uint32 i;
|
||||
@ -485,7 +487,7 @@ _hash_freeovflpage(Relation rel, Buffer ovflbuf, Buffer wbuf,
|
||||
metap = HashPageGetMeta(BufferGetPage(metabuf));
|
||||
|
||||
/* Identify which bit to set */
|
||||
ovflbitno = blkno_to_bitno(metap, ovflblkno);
|
||||
ovflbitno = _hash_ovflblkno_to_bitno(metap, ovflblkno);
|
||||
|
||||
bitmappage = ovflbitno >> BMPG_SHIFT(metap);
|
||||
bitmapbit = ovflbitno & BMPG_MASK(metap);
|
||||
|
@ -58,6 +58,9 @@ typedef uint32 Bucket;
|
||||
#define LH_BUCKET_BEING_SPLIT (1 << 5)
|
||||
#define LH_BUCKET_NEEDS_SPLIT_CLEANUP (1 << 6)
|
||||
|
||||
#define LH_PAGE_TYPE \
|
||||
(LH_OVERFLOW_PAGE|LH_BUCKET_PAGE|LH_BITMAP_PAGE|LH_META_PAGE)
|
||||
|
||||
typedef struct HashPageOpaqueData
|
||||
{
|
||||
BlockNumber hasho_prevblkno; /* previous ovfl (or bucket) blkno */
|
||||
@ -299,6 +302,7 @@ extern void _hash_squeezebucket(Relation rel,
|
||||
Bucket bucket, BlockNumber bucket_blkno,
|
||||
Buffer bucket_buf,
|
||||
BufferAccessStrategy bstrategy);
|
||||
extern uint32 _hash_ovflblkno_to_bitno(HashMetaPage metap, BlockNumber ovflblkno);
|
||||
|
||||
/* hashpage.c */
|
||||
extern Buffer _hash_getbuf(Relation rel, BlockNumber blkno,
|
||||
|
Reference in New Issue
Block a user