PostgreSQL Source Code git master
relcache.h
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * relcache.h
4 * Relation descriptor cache definitions.
5 *
6 *
7 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
9 *
10 * src/include/utils/relcache.h
11 *
12 *-------------------------------------------------------------------------
13 */
14#ifndef RELCACHE_H
15#define RELCACHE_H
16
17#include "access/tupdesc.h"
18#include "common/relpath.h"
19#include "nodes/bitmapset.h"
20
21
22/*
23 * Name of relcache init file(s), used to speed up backend startup
24 */
25#define RELCACHE_INIT_FILENAME "pg_internal.init"
26
27typedef struct RelationData *Relation;
28
29/* ----------------
30 * RelationPtr is used in the executor to support index scans
31 * where we have to keep track of several index relations in an
32 * array. -cim 9/10/89
33 * ----------------
34 */
36
37/*
38 * Routines to open (lookup) and close a relcache entry
39 */
40extern Relation RelationIdGetRelation(Oid relationId);
41extern void RelationClose(Relation relation);
42
43/*
44 * Routines to compute/retrieve additional cached information
45 */
46extern List *RelationGetFKeyList(Relation relation);
47extern List *RelationGetIndexList(Relation relation);
48extern List *RelationGetStatExtList(Relation relation);
49extern Oid RelationGetPrimaryKeyIndex(Relation relation, bool deferrable_ok);
50extern Oid RelationGetReplicaIndex(Relation relation);
54extern bytea **RelationGetIndexAttOptions(Relation relation, bool copy);
55
56/*
57 * Which set of columns to return by RelationGetIndexAttrBitmap.
58 */
60{
67
69 IndexAttrBitmapKind attrKind);
70
72
73extern void RelationGetExclusionInfo(Relation indexRelation,
74 Oid **operators,
75 Oid **procs,
76 uint16 **strategies);
77
78extern void RelationInitIndexAccessInfo(Relation relation);
79
80/* caller must include pg_publication.h */
81struct PublicationDesc;
82extern void RelationBuildPublicationDesc(Relation relation,
83 struct PublicationDesc *pubdesc);
84
85extern void RelationInitTableAccessMethod(Relation relation);
86
87/*
88 * Routines to support ereport() reports of relation-related errors
89 */
90extern int errtable(Relation rel);
91extern int errtablecol(Relation rel, int attnum);
92extern int errtablecolname(Relation rel, const char *colname);
93extern int errtableconstraint(Relation rel, const char *conname);
94
95/*
96 * Routines for backend startup
97 */
98extern void RelationCacheInitialize(void);
99extern void RelationCacheInitializePhase2(void);
100extern void RelationCacheInitializePhase3(void);
101
102/*
103 * Routine to create a relcache entry for an about-to-be-created relation
104 */
106 Oid relnamespace,
107 TupleDesc tupDesc,
108 Oid relid,
109 Oid accessmtd,
110 RelFileNumber relfilenumber,
111 Oid reltablespace,
112 bool shared_relation,
113 bool mapped_relation,
114 char relpersistence,
115 char relkind);
116
117/*
118 * Routines to manage assignment of new relfilenumber to a relation
119 */
120extern void RelationSetNewRelfilenumber(Relation relation, char persistence);
121extern void RelationAssumeNewRelfilelocator(Relation relation);
122
123/*
124 * Routines for flushing/rebuilding relcache entries in various scenarios
125 */
126extern void RelationForgetRelation(Oid rid);
127
128extern void RelationCacheInvalidateEntry(Oid relationId);
129
130extern void RelationCacheInvalidate(bool debug_discard);
131
132#ifdef USE_ASSERT_CHECKING
133extern void AssertPendingSyncs_RelationCache(void);
134#else
135#define AssertPendingSyncs_RelationCache() do {} while (0)
136#endif
137extern void AtEOXact_RelationCache(bool isCommit);
138extern void AtEOSubXact_RelationCache(bool isCommit, SubTransactionId mySubid,
139 SubTransactionId parentSubid);
140
141/*
142 * Routines to help manage rebuilding of relcache init files
143 */
144extern bool RelationIdIsInInitFile(Oid relationId);
145extern void RelationCacheInitFilePreInvalidate(void);
147extern void RelationCacheInitFileRemove(void);
148
149/* should be used only by relcache.c and catcache.c */
151
152/* should be used only by relcache.c and postinit.c */
154
155#endif /* RELCACHE_H */
#define PGDLLIMPORT
Definition: c.h:1291
uint32 SubTransactionId
Definition: c.h:627
uint16_t uint16
Definition: c.h:501
int16 attnum
Definition: pg_attribute.h:74
NameData relname
Definition: pg_class.h:38
unsigned int Oid
Definition: postgres_ext.h:32
List * RelationGetIndexList(Relation relation)
Definition: relcache.c:4764
void RelationCacheInvalidate(bool debug_discard)
Definition: relcache.c:2954
struct RelationData * Relation
Definition: relcache.h:27
PGDLLIMPORT bool criticalRelcachesBuilt
Definition: relcache.c:140
Oid RelationGetPrimaryKeyIndex(Relation relation, bool deferrable_ok)
Definition: relcache.c:4975
List * RelationGetDummyIndexExpressions(Relation relation)
Definition: relcache.c:5084
int errtableconstraint(Relation rel, const char *conname)
Definition: relcache.c:6031
int errtablecol(Relation rel, int attnum)
Definition: relcache.c:5994
IndexAttrBitmapKind
Definition: relcache.h:60
@ INDEX_ATTR_BITMAP_KEY
Definition: relcache.h:61
@ INDEX_ATTR_BITMAP_HOT_BLOCKING
Definition: relcache.h:64
@ INDEX_ATTR_BITMAP_PRIMARY_KEY
Definition: relcache.h:62
@ INDEX_ATTR_BITMAP_SUMMARIZED
Definition: relcache.h:65
@ INDEX_ATTR_BITMAP_IDENTITY_KEY
Definition: relcache.h:63
PGDLLIMPORT bool criticalSharedRelcachesBuilt
Definition: relcache.c:146
void RelationInitIndexAccessInfo(Relation relation)
Definition: relcache.c:1419
List * RelationGetIndexPredicate(Relation relation)
Definition: relcache.c:5138
Bitmapset * RelationGetIndexAttrBitmap(Relation relation, IndexAttrBitmapKind attrKind)
Definition: relcache.c:5231
void AtEOSubXact_RelationCache(bool isCommit, SubTransactionId mySubid, SubTransactionId parentSubid)
Definition: relcache.c:3338
List * RelationGetStatExtList(Relation relation)
Definition: relcache.c:4905
void RelationCacheInitFilePostInvalidate(void)
Definition: relcache.c:6813
void RelationCacheInitializePhase3(void)
Definition: relcache.c:4059
void RelationInitTableAccessMethod(Relation relation)
Definition: relcache.c:1803
void RelationBuildPublicationDesc(Relation relation, struct PublicationDesc *pubdesc)
Definition: relcache.c:5722
void RelationSetNewRelfilenumber(Relation relation, char persistence)
Definition: relcache.c:3725
#define AssertPendingSyncs_RelationCache()
Definition: relcache.h:135
List * RelationGetFKeyList(Relation relation)
Definition: relcache.c:4655
Oid RelationGetReplicaIndex(Relation relation)
Definition: relcache.c:5000
Relation RelationIdGetRelation(Oid relationId)
Definition: relcache.c:2056
void AtEOXact_RelationCache(bool isCommit)
Definition: relcache.c:3186
void RelationForgetRelation(Oid rid)
Definition: relcache.c:2853
void RelationCacheInitialize(void)
Definition: relcache.c:3954
void RelationCacheInitFilePreInvalidate(void)
Definition: relcache.c:6788
List * RelationGetIndexExpressions(Relation relation)
Definition: relcache.c:5025
Relation RelationBuildLocalRelation(const char *relname, Oid relnamespace, TupleDesc tupDesc, Oid relid, Oid accessmtd, RelFileNumber relfilenumber, Oid reltablespace, bool shared_relation, bool mapped_relation, char relpersistence, char relkind)
Definition: relcache.c:3475
void RelationAssumeNewRelfilelocator(Relation relation)
Definition: relcache.c:3928
void RelationCacheInitFileRemove(void)
Definition: relcache.c:6828
int errtablecolname(Relation rel, const char *colname)
Definition: relcache.c:6018
void RelationCacheInitializePhase2(void)
Definition: relcache.c:4000
bool RelationIdIsInInitFile(Oid relationId)
Definition: relcache.c:6748
int errtable(Relation rel)
Definition: relcache.c:5977
void RelationCacheInvalidateEntry(Oid relationId)
Definition: relcache.c:2898
bytea ** RelationGetIndexAttOptions(Relation relation, bool copy)
Definition: relcache.c:5916
Bitmapset * RelationGetIdentityKeyBitmap(Relation relation)
Definition: relcache.c:5504
void RelationGetExclusionInfo(Relation indexRelation, Oid **operators, Oid **procs, uint16 **strategies)
Definition: relcache.c:5581
Relation * RelationPtr
Definition: relcache.h:35
void RelationClose(Relation relation)
Definition: relcache.c:2178
Oid RelFileNumber
Definition: relpath.h:25
Definition: pg_list.h:54
Definition: c.h:658