mirror of
https://github.com/postgres/postgres.git
synced 2025-08-24 09:27:52 +03:00
Introduce the concept of relation forks. An smgr relation can now consist
of multiple forks, and each fork can be created and grown separately. The bulk of this patch is about changing the smgr API to include an extra ForkNumber argument in every smgr function. Also, smgrscheduleunlink and smgrdounlink no longer implicitly call smgrclose, because other forks might still exist after unlinking one. The callers of those functions have been modified to call smgrclose instead. This patch in itself doesn't have any user-visible effect, but provides the infrastructure needed for upcoming patches. The additional forks envisioned are a rewritten FSM implementation that doesn't rely on a fixed-size shared memory block, and a visibility map to allow skipping portions of a table in VACUUM that have no dead tuples.
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.114 2008/06/19 00:46:06 alvherre Exp $
|
||||
* $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.115 2008/08/11 11:05:11 heikki Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -144,11 +144,13 @@ extern PGDLLIMPORT int32 *LocalRefCount;
|
||||
* prototypes for functions in bufmgr.c
|
||||
*/
|
||||
extern Buffer ReadBuffer(Relation reln, BlockNumber blockNum);
|
||||
extern Buffer ReadBufferWithFork(Relation reln, ForkNumber forkNum, BlockNumber blockNum);
|
||||
extern Buffer ReadBufferWithStrategy(Relation reln, BlockNumber blockNum,
|
||||
BufferAccessStrategy strategy);
|
||||
extern Buffer ReadOrZeroBuffer(Relation reln, BlockNumber blockNum);
|
||||
extern Buffer ReadOrZeroBuffer(Relation reln, ForkNumber forkNum,
|
||||
BlockNumber blockNum);
|
||||
extern Buffer ReadBufferWithoutRelcache(RelFileNode rnode, bool isTemp,
|
||||
BlockNumber blockNum, bool zeroPage);
|
||||
ForkNumber forkNum, BlockNumber blockNum, bool zeroPage);
|
||||
extern void ReleaseBuffer(Buffer buffer);
|
||||
extern void UnlockReleaseBuffer(Buffer buffer);
|
||||
extern void MarkBufferDirty(Buffer buffer);
|
||||
@@ -169,15 +171,16 @@ extern BlockNumber RelationGetNumberOfBlocks(Relation relation);
|
||||
extern void RelationTruncate(Relation rel, BlockNumber nblocks);
|
||||
extern void FlushRelationBuffers(Relation rel);
|
||||
extern void FlushDatabaseBuffers(Oid dbid);
|
||||
extern void DropRelFileNodeBuffers(RelFileNode rnode, bool istemp,
|
||||
BlockNumber firstDelBlock);
|
||||
extern void DropRelFileNodeBuffers(RelFileNode rnode, ForkNumber forkNum,
|
||||
bool istemp, BlockNumber firstDelBlock);
|
||||
extern void DropDatabaseBuffers(Oid dbid);
|
||||
|
||||
#ifdef NOT_USED
|
||||
extern void PrintPinnedBufs(void);
|
||||
#endif
|
||||
extern Size BufferShmemSize(void);
|
||||
extern RelFileNode BufferGetFileNode(Buffer buffer);
|
||||
extern void BufferGetTag(Buffer buffer, RelFileNode *rnode,
|
||||
ForkNumber *forknum, BlockNumber *blknum);
|
||||
|
||||
extern void SetBufferCommitInfoNeedsSave(Buffer buffer);
|
||||
|
||||
|
Reference in New Issue
Block a user