1 /*------------------------------------------------------------------------- 2 * 3 * relcache.h 4 * Relation descriptor cache definitions. 5 * 6 * 7 * Portions Copyright (c) 1996-2016, 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 "nodes/bitmapset.h" 19 20 21 typedef struct RelationData *Relation; 22 23 /* ---------------- 24 * RelationPtr is used in the executor to support index scans 25 * where we have to keep track of several index relations in an 26 * array. -cim 9/10/89 27 * ---------------- 28 */ 29 typedef Relation *RelationPtr; 30 31 /* 32 * Routines to open (lookup) and close a relcache entry 33 */ 34 extern Relation RelationIdGetRelation(Oid relationId); 35 extern void RelationClose(Relation relation); 36 37 /* 38 * Routines to compute/retrieve additional cached information 39 */ 40 extern List *RelationGetFKeyList(Relation relation); 41 extern List *RelationGetIndexList(Relation relation); 42 extern Oid RelationGetOidIndex(Relation relation); 43 extern Oid RelationGetReplicaIndex(Relation relation); 44 extern List *RelationGetIndexExpressions(Relation relation); 45 extern List *RelationGetDummyIndexExpressions(Relation relation); 46 extern List *RelationGetIndexPredicate(Relation relation); 47 48 typedef enum IndexAttrBitmapKind 49 { 50 INDEX_ATTR_BITMAP_ALL, 51 INDEX_ATTR_BITMAP_KEY, 52 INDEX_ATTR_BITMAP_IDENTITY_KEY 53 } IndexAttrBitmapKind; 54 55 extern Bitmapset *RelationGetIndexAttrBitmap(Relation relation, 56 IndexAttrBitmapKind keyAttrs); 57 58 extern void RelationGetExclusionInfo(Relation indexRelation, 59 Oid **operators, 60 Oid **procs, 61 uint16 **strategies); 62 63 extern void RelationSetIndexList(Relation relation, 64 List *indexIds, Oid oidIndex); 65 66 extern void RelationInitIndexAccessInfo(Relation relation); 67 68 /* 69 * Routines to support ereport() reports of relation-related errors 70 */ 71 extern int errtable(Relation rel); 72 extern int errtablecol(Relation rel, int attnum); 73 extern int errtablecolname(Relation rel, const char *colname); 74 extern int errtableconstraint(Relation rel, const char *conname); 75 76 /* 77 * Routines for backend startup 78 */ 79 extern void RelationCacheInitialize(void); 80 extern void RelationCacheInitializePhase2(void); 81 extern void RelationCacheInitializePhase3(void); 82 83 /* 84 * Routine to create a relcache entry for an about-to-be-created relation 85 */ 86 extern Relation RelationBuildLocalRelation(const char *relname, 87 Oid relnamespace, 88 TupleDesc tupDesc, 89 Oid relid, 90 Oid relfilenode, 91 Oid reltablespace, 92 bool shared_relation, 93 bool mapped_relation, 94 char relpersistence, 95 char relkind); 96 97 /* 98 * Routine to manage assignment of new relfilenode to a relation 99 */ 100 extern void RelationSetNewRelfilenode(Relation relation, char persistence, 101 TransactionId freezeXid, MultiXactId minmulti); 102 103 /* 104 * Routines for flushing/rebuilding relcache entries in various scenarios 105 */ 106 extern void RelationForgetRelation(Oid rid); 107 108 extern void RelationCacheInvalidateEntry(Oid relationId); 109 110 extern void RelationCacheInvalidate(bool debug_discard); 111 112 extern void RelationCloseSmgrByOid(Oid relationId); 113 114 extern void AtEOXact_RelationCache(bool isCommit); 115 extern void AtEOSubXact_RelationCache(bool isCommit, SubTransactionId mySubid, 116 SubTransactionId parentSubid); 117 118 /* 119 * Routines to help manage rebuilding of relcache init files 120 */ 121 extern bool RelationIdIsInInitFile(Oid relationId); 122 extern void RelationCacheInitFilePreInvalidate(void); 123 extern void RelationCacheInitFilePostInvalidate(void); 124 extern void RelationCacheInitFileRemove(void); 125 126 /* should be used only by relcache.c and catcache.c */ 127 extern bool criticalRelcachesBuilt; 128 129 /* should be used only by relcache.c and postinit.c */ 130 extern bool criticalSharedRelcachesBuilt; 131 132 #endif /* RELCACHE_H */ 133