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 */
40#ifdef USE_ASSERT_CHECKING
41extern void AssertCouldGetRelation(void);
42#else
43static inline void
45{
46}
47#endif
48extern Relation RelationIdGetRelation(Oid relationId);
49extern void RelationClose(Relation relation);
50
51/*
52 * Routines to compute/retrieve additional cached information
53 */
54extern List *RelationGetFKeyList(Relation relation);
55extern List *RelationGetIndexList(Relation relation);
56extern List *RelationGetStatExtList(Relation relation);
57extern Oid RelationGetPrimaryKeyIndex(Relation relation, bool deferrable_ok);
58extern Oid RelationGetReplicaIndex(Relation relation);
62extern bytea **RelationGetIndexAttOptions(Relation relation, bool copy);
63
64/*
65 * Which set of columns to return by RelationGetIndexAttrBitmap.
66 */
68{
75
77 IndexAttrBitmapKind attrKind);
78
80
81extern void RelationGetExclusionInfo(Relation indexRelation,
82 Oid **operators,
83 Oid **procs,
84 uint16 **strategies);
85
86extern void RelationInitIndexAccessInfo(Relation relation);
87
88/* caller must include pg_publication.h */
89struct PublicationDesc;
90extern void RelationBuildPublicationDesc(Relation relation,
91 struct PublicationDesc *pubdesc);
92
93extern void RelationInitTableAccessMethod(Relation relation);
94
95/*
96 * Routines to support ereport() reports of relation-related errors
97 */
98extern int errtable(Relation rel);
99extern int errtablecol(Relation rel, int attnum);
100extern int errtablecolname(Relation rel, const char *colname);
101extern int errtableconstraint(Relation rel, const char *conname);
102
103/*
104 * Routines for backend startup
105 */
106extern void RelationCacheInitialize(void);
107extern void RelationCacheInitializePhase2(void);
108extern void RelationCacheInitializePhase3(void);
109
110/*
111 * Routine to create a relcache entry for an about-to-be-created relation
112 */
114 Oid relnamespace,
115 TupleDesc tupDesc,
116 Oid relid,
117 Oid accessmtd,
118 RelFileNumber relfilenumber,
119 Oid reltablespace,
120 bool shared_relation,
121 bool mapped_relation,
122 char relpersistence,
123 char relkind);
124
125/*
126 * Routines to manage assignment of new relfilenumber to a relation
127 */
128extern void RelationSetNewRelfilenumber(Relation relation, char persistence);
129extern void RelationAssumeNewRelfilelocator(Relation relation);
130
131/*
132 * Routines for flushing/rebuilding relcache entries in various scenarios
133 */
134extern void RelationForgetRelation(Oid rid);
135
136extern void RelationCacheInvalidateEntry(Oid relationId);
137
138extern void RelationCacheInvalidate(bool debug_discard);
139
140#ifdef USE_ASSERT_CHECKING
141extern void AssertPendingSyncs_RelationCache(void);
142#else
143#define AssertPendingSyncs_RelationCache() do {} while (0)
144#endif
145extern void AtEOXact_RelationCache(bool isCommit);
146extern void AtEOSubXact_RelationCache(bool isCommit, SubTransactionId mySubid,
147 SubTransactionId parentSubid);
148
149/*
150 * Routines to help manage rebuilding of relcache init files
151 */
152extern bool RelationIdIsInInitFile(Oid relationId);
153extern void RelationCacheInitFilePreInvalidate(void);
155extern void RelationCacheInitFileRemove(void);
156
157/* should be used only by relcache.c and catcache.c */
159
160/* should be used only by relcache.c and postinit.c */
162
163#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:30
List * RelationGetIndexList(Relation relation)
Definition: relcache.c:4833
void RelationCacheInvalidate(bool debug_discard)
Definition: relcache.c:2994
struct RelationData * Relation
Definition: relcache.h:27
PGDLLIMPORT bool criticalRelcachesBuilt
Definition: relcache.c:140
Oid RelationGetPrimaryKeyIndex(Relation relation, bool deferrable_ok)
Definition: relcache.c:5044
List * RelationGetDummyIndexExpressions(Relation relation)
Definition: relcache.c:5153
int errtableconstraint(Relation rel, const char *conname)
Definition: relcache.c:6100
int errtablecol(Relation rel, int attnum)
Definition: relcache.c:6063
IndexAttrBitmapKind
Definition: relcache.h:68
@ INDEX_ATTR_BITMAP_KEY
Definition: relcache.h:69
@ INDEX_ATTR_BITMAP_HOT_BLOCKING
Definition: relcache.h:72
@ INDEX_ATTR_BITMAP_PRIMARY_KEY
Definition: relcache.h:70
@ INDEX_ATTR_BITMAP_SUMMARIZED
Definition: relcache.h:73
@ INDEX_ATTR_BITMAP_IDENTITY_KEY
Definition: relcache.h:71
PGDLLIMPORT bool criticalSharedRelcachesBuilt
Definition: relcache.c:146
void RelationInitIndexAccessInfo(Relation relation)
Definition: relcache.c:1445
List * RelationGetIndexPredicate(Relation relation)
Definition: relcache.c:5207
Bitmapset * RelationGetIndexAttrBitmap(Relation relation, IndexAttrBitmapKind attrKind)
Definition: relcache.c:5300
void AtEOSubXact_RelationCache(bool isCommit, SubTransactionId mySubid, SubTransactionId parentSubid)
Definition: relcache.c:3378
List * RelationGetStatExtList(Relation relation)
Definition: relcache.c:4974
void RelationCacheInitFilePostInvalidate(void)
Definition: relcache.c:6882
void RelationCacheInitializePhase3(void)
Definition: relcache.c:4107
void RelationInitTableAccessMethod(Relation relation)
Definition: relcache.c:1829
void RelationBuildPublicationDesc(Relation relation, struct PublicationDesc *pubdesc)
Definition: relcache.c:5791
void RelationSetNewRelfilenumber(Relation relation, char persistence)
Definition: relcache.c:3773
#define AssertPendingSyncs_RelationCache()
Definition: relcache.h:143
List * RelationGetFKeyList(Relation relation)
Definition: relcache.c:4728
Oid RelationGetReplicaIndex(Relation relation)
Definition: relcache.c:5069
Relation RelationIdGetRelation(Oid relationId)
Definition: relcache.c:2099
void AtEOXact_RelationCache(bool isCommit)
Definition: relcache.c:3226
void RelationForgetRelation(Oid rid)
Definition: relcache.c:2893
void RelationCacheInitialize(void)
Definition: relcache.c:4002
void RelationCacheInitFilePreInvalidate(void)
Definition: relcache.c:6857
List * RelationGetIndexExpressions(Relation relation)
Definition: relcache.c:5094
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:3515
void RelationAssumeNewRelfilelocator(Relation relation)
Definition: relcache.c:3976
void RelationCacheInitFileRemove(void)
Definition: relcache.c:6897
int errtablecolname(Relation rel, const char *colname)
Definition: relcache.c:6087
void RelationCacheInitializePhase2(void)
Definition: relcache.c:4048
bool RelationIdIsInInitFile(Oid relationId)
Definition: relcache.c:6817
int errtable(Relation rel)
Definition: relcache.c:6046
void RelationCacheInvalidateEntry(Oid relationId)
Definition: relcache.c:2938
bytea ** RelationGetIndexAttOptions(Relation relation, bool copy)
Definition: relcache.c:5985
Bitmapset * RelationGetIdentityKeyBitmap(Relation relation)
Definition: relcache.c:5573
static void AssertCouldGetRelation(void)
Definition: relcache.h:44
void RelationGetExclusionInfo(Relation indexRelation, Oid **operators, Oid **procs, uint16 **strategies)
Definition: relcache.c:5650
Relation * RelationPtr
Definition: relcache.h:35
void RelationClose(Relation relation)
Definition: relcache.c:2220
Oid RelFileNumber
Definition: relpath.h:25
Definition: pg_list.h:54
Definition: c.h:658