Skip to content
Snippets Groups Projects
  • Tom Lane's avatar
    5df307c7
    Restructure local-buffer handling per recent pghackers discussion. · 5df307c7
    Tom Lane authored
    The local buffer manager is no longer used for newly-created relations
    (unless they are TEMP); a new non-TEMP relation goes through the shared
    bufmgr and thus will participate normally in checkpoints.  But TEMP relations
    use the local buffer manager throughout their lifespan.  Also, operations
    in TEMP relations are not logged in WAL, thus improving performance.
    Since it's no longer necessary to fsync relations as they move out of the
    local buffers into shared buffers, quite a lot of smgr.c/md.c/fd.c code
    is no longer needed and has been removed: there's no concept of a dirty
    relation anymore in md.c/fd.c, and we never fsync anything but WAL.
    Still TODO: improve local buffer management algorithms so that it would
    be reasonable to increase NLocBuffer.
    5df307c7
    History
    Restructure local-buffer handling per recent pghackers discussion.
    Tom Lane authored
    The local buffer manager is no longer used for newly-created relations
    (unless they are TEMP); a new non-TEMP relation goes through the shared
    bufmgr and thus will participate normally in checkpoints.  But TEMP relations
    use the local buffer manager throughout their lifespan.  Also, operations
    in TEMP relations are not logged in WAL, thus improving performance.
    Since it's no longer necessary to fsync relations as they move out of the
    local buffers into shared buffers, quite a lot of smgr.c/md.c/fd.c code
    is no longer needed and has been removed: there's no concept of a dirty
    relation anymore in md.c/fd.c, and we never fsync anything but WAL.
    Still TODO: improve local buffer management algorithms so that it would
    be reasonable to increase NLocBuffer.
relcache.h 2.18 KiB
/*-------------------------------------------------------------------------
 *
 * relcache.h
 *	  Relation descriptor cache definitions.
 *
 *
 * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * $Id: relcache.h,v 1.34 2002/08/06 02:36:35 tgl Exp $
 *
 *-------------------------------------------------------------------------
 */
#ifndef RELCACHE_H
#define RELCACHE_H

#include "utils/rel.h"

/*
 * relation lookup routines
 */
extern Relation RelationIdGetRelation(Oid relationId);
extern Relation RelationSysNameGetRelation(const char *relationName);

/* finds an existing cache entry, but won't make a new one */
extern Relation RelationIdCacheGetRelation(Oid relationId);
extern Relation RelationNodeCacheGetRelation(RelFileNode rnode);

extern void RelationClose(Relation relation);

/*
 * Routines to compute/retrieve additional cached information
 */
extern List *RelationGetIndexList(Relation relation);

extern void RelationInitIndexAccessInfo(Relation relation);

/*
 * Routines for backend startup
 */
extern void RelationCacheInitialize(void);
extern void RelationCacheInitializePhase2(void);
extern void RelationCacheInitializePhase3(void);

/*
 * Routine to create a relcache entry for an about-to-be-created relation
 */
extern Relation RelationBuildLocalRelation(const char *relname,
						   Oid relnamespace,
						   TupleDesc tupDesc,
						   Oid relid, Oid dbid,
						   RelFileNode rnode,
						   bool nailit);

/*
 * Routines for flushing/rebuilding relcache entries in various scenarios
 */
extern void RelationForgetRelation(Oid rid);

extern void RelationIdInvalidateRelationCacheByRelationId(Oid relationId);

extern void RelationCacheInvalidate(void);

extern void AtEOXact_RelationCache(bool commit);

/*
 * Routines to help manage rebuilding of relcache init file
 */
extern bool RelationIdIsInInitFile(Oid relationId);
extern void RelationCacheInitFileInvalidate(bool beforeSend);

/* XLOG support */
extern void CreateDummyCaches(void);
extern void DestroyDummyCaches(void);


/* should be used only by relcache.c and catcache.c */
extern bool criticalRelcachesBuilt;

#endif   /* RELCACHE_H */