aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/cache
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/cache')
-rw-r--r--src/backend/utils/cache/catcache.c55
-rw-r--r--src/backend/utils/cache/lsyscache.c21
-rw-r--r--src/backend/utils/cache/relcache.c315
-rw-r--r--src/backend/utils/cache/syscache.c168
-rw-r--r--src/backend/utils/cache/typcache.c7
5 files changed, 187 insertions, 379 deletions
diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c
index 44ef1de6eee..13711b22416 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/cache/catcache.c,v 1.119 2005/03/25 18:30:27 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/cache/catcache.c,v 1.120 2005/04/14 20:03:26 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -21,7 +21,6 @@
#include "catalog/pg_opclass.h"
#include "catalog/pg_operator.h"
#include "catalog/pg_type.h"
-#include "catalog/catname.h"
#include "catalog/indexing.h"
#include "miscadmin.h"
#ifdef CATCACHE_STATS
@@ -35,7 +34,7 @@
#include "utils/syscache.h"
- /* #define CACHEDEBUG */ /* turns DEBUG elogs on */
+/* #define CACHEDEBUG */ /* turns DEBUG elogs on */
/*
* Constants related to size of the catcache.
@@ -297,9 +296,9 @@ CatCachePrintStats(void)
{
if (cache->cc_ntup == 0 && cache->cc_searches == 0)
continue; /* don't print unused caches */
- elog(DEBUG2, "catcache %s/%s: %d tup, %ld srch, %ld+%ld=%ld hits, %ld+%ld=%ld loads, %ld invals, %ld discards, %ld lsrch, %ld lhits",
+ elog(DEBUG2, "catcache %s/%u: %d tup, %ld srch, %ld+%ld=%ld hits, %ld+%ld=%ld loads, %ld invals, %ld discards, %ld lsrch, %ld lhits",
cache->cc_relname,
- cache->cc_indname,
+ cache->cc_indexoid,
cache->cc_ntup,
cache->cc_searches,
cache->cc_hits,
@@ -763,8 +762,9 @@ CatalogCacheFlushRelation(Oid relId)
#ifdef CACHEDEBUG
#define InitCatCache_DEBUG2 \
do { \
- elog(DEBUG2, "InitCatCache: rel=%s id=%d nkeys=%d size=%d", \
- cp->cc_relname, cp->id, cp->cc_nkeys, cp->cc_nbuckets); \
+ elog(DEBUG2, "InitCatCache: rel=%u ind=%u id=%d nkeys=%d size=%d", \
+ cp->cc_reloid, cp->cc_indexoid, cp->id, \
+ cp->cc_nkeys, cp->cc_nbuckets); \
} while(0)
#else
@@ -773,8 +773,8 @@ do { \
CatCache *
InitCatCache(int id,
- const char *relname,
- const char *indname,
+ Oid reloid,
+ Oid indexoid,
int reloidattr,
int nkeys,
const int *key)
@@ -821,9 +821,9 @@ InitCatCache(int id,
* other internal fields. But don't open the relation yet.
*/
cp->id = id;
- cp->cc_relname = relname;
- cp->cc_indname = indname;
- cp->cc_reloid = InvalidOid; /* temporary */
+ cp->cc_relname = "(not known yet)";
+ cp->cc_reloid = reloid;
+ cp->cc_indexoid = indexoid;
cp->cc_relisshared = false; /* temporary */
cp->cc_tupdesc = (TupleDesc) NULL;
cp->cc_reloidattr = reloidattr;
@@ -861,9 +861,9 @@ InitCatCache(int id,
* that the relcache entry can be opened at this point!
*/
#ifdef CACHEDEBUG
-#define CatalogCacheInitializeCache_DEBUG2 \
- elog(DEBUG2, "CatalogCacheInitializeCache: cache @%p %s", cache, \
- cache->cc_relname)
+#define CatalogCacheInitializeCache_DEBUG1 \
+ elog(DEBUG2, "CatalogCacheInitializeCache: cache @%p rel=%u", cache, \
+ cache->cc_reloid)
#define CatalogCacheInitializeCache_DEBUG2 \
do { \
@@ -878,7 +878,7 @@ do { \
} while(0)
#else
-#define CatalogCacheInitializeCache_DEBUG2
+#define CatalogCacheInitializeCache_DEBUG1
#define CatalogCacheInitializeCache_DEBUG2
#endif
@@ -890,13 +890,13 @@ CatalogCacheInitializeCache(CatCache *cache)
TupleDesc tupdesc;
int i;
- CatalogCacheInitializeCache_DEBUG2;
+ CatalogCacheInitializeCache_DEBUG1;
/*
* Open the relation without locking --- we only need the tupdesc,
* which we assume will never change ...
*/
- relation = heap_openr(cache->cc_relname, NoLock);
+ relation = heap_open(cache->cc_reloid, NoLock);
Assert(RelationIsValid(relation));
/*
@@ -913,9 +913,10 @@ CatalogCacheInitializeCache(CatCache *cache)
tupdesc = CreateTupleDescCopyConstr(RelationGetDescr(relation));
/*
- * get the relation's OID and relisshared flag, too
+ * save the relation's name and relisshared flag, too (cc_relname
+ * is used only for debugging purposes)
*/
- cache->cc_reloid = RelationGetRelid(relation);
+ cache->cc_relname = pstrdup(RelationGetRelationName(relation));
cache->cc_relisshared = RelationGetForm(relation)->relisshared;
/*
@@ -999,7 +1000,7 @@ InitCatCachePhase2(CatCache *cache)
{
Relation idesc;
- idesc = index_openr(cache->cc_indname);
+ idesc = index_open(cache->cc_indexoid);
index_close(idesc);
}
}
@@ -1202,7 +1203,7 @@ SearchCatCache(CatCache *cache,
relation = heap_open(cache->cc_reloid, AccessShareLock);
scandesc = systable_beginscan(relation,
- cache->cc_indname,
+ cache->cc_indexoid,
IndexScanOK(cache, cur_skey),
SnapshotNow,
cache->cc_nkeys,
@@ -1230,9 +1231,17 @@ SearchCatCache(CatCache *cache,
* If tuple was not found, we need to build a negative cache entry
* containing a fake tuple. The fake tuple has the correct key
* columns, but nulls everywhere else.
+ *
+ * In bootstrap mode, we don't build negative entries, because the
+ * cache invalidation mechanism isn't alive and can't clear them
+ * if the tuple gets created later. (Bootstrap doesn't do UPDATEs,
+ * so it doesn't need cache inval for that.)
*/
if (ct == NULL)
{
+ if (IsBootstrapProcessingMode())
+ return NULL;
+
ntp = build_dummy_tuple(cache, cache->cc_nkeys, cur_skey);
ct = CatalogCacheCreateEntry(cache, ntp,
hashValue, hashIndex,
@@ -1427,7 +1436,7 @@ SearchCatCacheList(CatCache *cache,
relation = heap_open(cache->cc_reloid, AccessShareLock);
scandesc = systable_beginscan(relation,
- cache->cc_indname,
+ cache->cc_indexoid,
true,
SnapshotNow,
nkeys,
diff --git a/src/backend/utils/cache/lsyscache.c b/src/backend/utils/cache/lsyscache.c
index 2c4d20576a5..e46825212e1 100644
--- a/src/backend/utils/cache/lsyscache.c
+++ b/src/backend/utils/cache/lsyscache.c
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/cache/lsyscache.c,v 1.123 2005/04/11 23:06:56 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/cache/lsyscache.c,v 1.124 2005/04/14 20:03:26 tgl Exp $
*
* NOTES
* Eventually, the index information should go through here, too.
@@ -931,25 +931,6 @@ get_relname_relid(const char *relname, Oid relnamespace)
0, 0);
}
-/*
- * get_system_catalog_relid
- * Get the OID of a system catalog identified by name.
- */
-Oid
-get_system_catalog_relid(const char *catname)
-{
- Oid relid;
-
- relid = GetSysCacheOid(RELNAMENSP,
- PointerGetDatum(catname),
- ObjectIdGetDatum(PG_CATALOG_NAMESPACE),
- 0, 0);
- if (!OidIsValid(relid))
- elog(ERROR, "cache lookup failed for system relation %s", catname);
-
- return relid;
-}
-
#ifdef NOT_USED
/*
* get_relnatts
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index e6c59b1815b..ab773de9c80 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.219 2005/04/14 01:38:19 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.220 2005/04/14 20:03:26 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -17,7 +17,6 @@
* RelationCacheInitialize - initialize relcache
* RelationCacheInitializePhase2 - finish initializing relcache
* RelationIdGetRelation - get a reldesc by relation id
- * RelationSysNameGetRelation - get a reldesc by system rel name
* RelationIdCacheGetRelation - get a cached reldesc by relid
* RelationClose - close an open relation
*
@@ -34,7 +33,6 @@
#include "access/genam.h"
#include "access/heapam.h"
#include "catalog/catalog.h"
-#include "catalog/catname.h"
#include "catalog/indexing.h"
#include "catalog/namespace.h"
#include "catalog/pg_amop.h"
@@ -85,14 +83,16 @@ static FormData_pg_attribute Desc_pg_index[Natts_pg_index] = {Schema_pg_index};
/*
* Hash tables that index the relation cache
*
- * Relations are looked up two ways, by OID and by name,
- * thus there are two hash tables for referencing them.
- *
- * The OID index covers all relcache entries. The name index
- * covers *only* system relations (only those in PG_CATALOG_NAMESPACE).
+ * We used to index the cache by both name and OID, but now there
+ * is only an index by OID.
*/
+typedef struct relidcacheent
+{
+ Oid reloid;
+ Relation reldesc;
+} RelIdCacheEnt;
+
static HTAB *RelationIdCache;
-static HTAB *RelationSysNameCache;
/*
* This flag is false until we have prepared the critical relcache entries
@@ -125,33 +125,6 @@ static List *initFileRelationIds = NIL;
*/
static bool need_eosubxact_work = false;
-/*
- * RelationBuildDescInfo exists so code can be shared
- * between RelationIdGetRelation() and RelationSysNameGetRelation()
- */
-typedef struct RelationBuildDescInfo
-{
- int infotype; /* lookup by id or by name */
-#define INFO_RELID 1
-#define INFO_RELNAME 2
- union
- {
- Oid info_id; /* relation object id */
- char *info_name; /* system relation name */
- } i;
-} RelationBuildDescInfo;
-
-typedef struct relidcacheent
-{
- Oid reloid;
- Relation reldesc;
-} RelIdCacheEnt;
-
-typedef struct relnamecacheent
-{
- NameData relname;
- Relation reldesc;
-} RelNameCacheEnt;
/*
* macros to manipulate the lookup hashtables
@@ -169,39 +142,13 @@ do { \
errmsg("out of memory"))); \
/* used to give notice if found -- now just keep quiet */ \
idhentry->reldesc = RELATION; \
- if (IsSystemNamespace(RelationGetNamespace(RELATION))) \
- { \
- char *relname = RelationGetRelationName(RELATION); \
- RelNameCacheEnt *namehentry; \
- namehentry = (RelNameCacheEnt*)hash_search(RelationSysNameCache, \
- relname, \
- HASH_ENTER, \
- &found); \
- if (namehentry == NULL) \
- ereport(ERROR, \
- (errcode(ERRCODE_OUT_OF_MEMORY), \
- errmsg("out of memory"))); \
- /* used to give notice if found -- now just keep quiet */ \
- namehentry->reldesc = RELATION; \
- } \
} while(0)
#define RelationIdCacheLookup(ID, RELATION) \
do { \
RelIdCacheEnt *hentry; \
hentry = (RelIdCacheEnt*)hash_search(RelationIdCache, \
- (void *)&(ID), HASH_FIND,NULL); \
- if (hentry) \
- RELATION = hentry->reldesc; \
- else \
- RELATION = NULL; \
-} while(0)
-
-#define RelationSysNameCacheLookup(NAME, RELATION) \
-do { \
- RelNameCacheEnt *hentry; \
- hentry = (RelNameCacheEnt*)hash_search(RelationSysNameCache, \
- (void *) (NAME), HASH_FIND,NULL); \
+ (void *) &(ID), HASH_FIND,NULL); \
if (hentry) \
RELATION = hentry->reldesc; \
else \
@@ -212,20 +159,10 @@ do { \
do { \
RelIdCacheEnt *idhentry; \
idhentry = (RelIdCacheEnt*)hash_search(RelationIdCache, \
- (void *)&(RELATION->rd_id), \
+ (void *) &(RELATION->rd_id), \
HASH_REMOVE, NULL); \
if (idhentry == NULL) \
elog(WARNING, "trying to delete a rd_id reldesc that does not exist"); \
- if (IsSystemNamespace(RelationGetNamespace(RELATION))) \
- { \
- char *relname = RelationGetRelationName(RELATION); \
- RelNameCacheEnt *namehentry; \
- namehentry = (RelNameCacheEnt*)hash_search(RelationSysNameCache, \
- relname, \
- HASH_REMOVE, NULL); \
- if (namehentry == NULL) \
- elog(WARNING, "trying to delete a relname reldesc that does not exist"); \
- } \
} while(0)
@@ -253,19 +190,16 @@ static void RelationClearRelation(Relation relation, bool rebuild);
static void RelationReloadClassinfo(Relation relation);
static void RelationFlushRelation(Relation relation);
-static Relation RelationSysNameCacheGetRelation(const char *relationName);
static bool load_relcache_init_file(void);
static void write_relcache_init_file(void);
static void formrdesc(const char *relationName, Oid relationReltype,
bool hasoids, int natts, FormData_pg_attribute *att);
-static HeapTuple ScanPgRelation(RelationBuildDescInfo buildinfo, bool indexOK);
+static HeapTuple ScanPgRelation(Oid targetRelId, bool indexOK);
static Relation AllocateRelationDesc(Relation relation, Form_pg_class relp);
-static void RelationBuildTupleDesc(RelationBuildDescInfo buildinfo,
- Relation relation);
-static Relation RelationBuildDesc(RelationBuildDescInfo buildinfo,
- Relation oldrelation);
+static void RelationBuildTupleDesc(Relation relation);
+static Relation RelationBuildDesc(Oid targetRelId, Relation oldrelation);
static void RelationInitPhysicalAddr(Relation relation);
static TupleDesc GetPgIndexDescriptor(void);
static void AttrDefaultFetch(Relation relation);
@@ -286,54 +220,26 @@ static OpClassCacheEnt *LookupOpclassInfo(Oid operatorClassOid,
* ScanPgRelation
*
* this is used by RelationBuildDesc to find a pg_class
- * tuple matching either a relation name or a relation id
- * as specified in buildinfo.
+ * tuple matching targetRelId.
*
* NB: the returned tuple has been copied into palloc'd storage
* and must eventually be freed with heap_freetuple.
*/
static HeapTuple
-ScanPgRelation(RelationBuildDescInfo buildinfo, bool indexOK)
+ScanPgRelation(Oid targetRelId, bool indexOK)
{
HeapTuple pg_class_tuple;
Relation pg_class_desc;
- const char *indexRelname;
SysScanDesc pg_class_scan;
- ScanKeyData key[2];
- int nkeys;
+ ScanKeyData key[1];
/*
* form a scan key
*/
- switch (buildinfo.infotype)
- {
- case INFO_RELID:
- ScanKeyInit(&key[0],
- ObjectIdAttributeNumber,
- BTEqualStrategyNumber, F_OIDEQ,
- ObjectIdGetDatum(buildinfo.i.info_id));
- nkeys = 1;
- indexRelname = ClassOidIndex;
- break;
-
- case INFO_RELNAME:
- ScanKeyInit(&key[0],
- Anum_pg_class_relname,
- BTEqualStrategyNumber, F_NAMEEQ,
- NameGetDatum(buildinfo.i.info_name));
- ScanKeyInit(&key[1],
- Anum_pg_class_relnamespace,
- BTEqualStrategyNumber, F_OIDEQ,
- ObjectIdGetDatum(PG_CATALOG_NAMESPACE));
- nkeys = 2;
- indexRelname = ClassNameNspIndex;
- break;
-
- default:
- elog(ERROR, "unrecognized buildinfo type: %d",
- buildinfo.infotype);
- return NULL; /* keep compiler quiet */
- }
+ ScanKeyInit(&key[0],
+ ObjectIdAttributeNumber,
+ BTEqualStrategyNumber, F_OIDEQ,
+ ObjectIdGetDatum(targetRelId));
/*
* Open pg_class and fetch a tuple. Force heap scan if we haven't yet
@@ -341,11 +247,11 @@ ScanPgRelation(RelationBuildDescInfo buildinfo, bool indexOK)
* startup without a pg_internal.init file). The caller can also
* force a heap scan by setting indexOK == false.
*/
- pg_class_desc = heap_openr(RelationRelationName, AccessShareLock);
- pg_class_scan = systable_beginscan(pg_class_desc, indexRelname,
+ pg_class_desc = heap_open(RelationRelationId, AccessShareLock);
+ pg_class_scan = systable_beginscan(pg_class_desc, ClassOidIndexId,
indexOK && criticalRelcachesBuilt,
SnapshotNow,
- nkeys, key);
+ 1, key);
pg_class_tuple = systable_getnext(pg_class_scan);
@@ -429,8 +335,7 @@ AllocateRelationDesc(Relation relation, Form_pg_class relp)
* the pg_attribute, pg_attrdef & pg_constraint system catalogs.
*/
static void
-RelationBuildTupleDesc(RelationBuildDescInfo buildinfo,
- Relation relation)
+RelationBuildTupleDesc(Relation relation)
{
HeapTuple pg_attribute_tuple;
Relation pg_attribute_desc;
@@ -469,9 +374,9 @@ RelationBuildTupleDesc(RelationBuildDescInfo buildinfo,
* yet built the critical relcache entries (this includes initdb and
* startup without a pg_internal.init file).
*/
- pg_attribute_desc = heap_openr(AttributeRelationName, AccessShareLock);
+ pg_attribute_desc = heap_open(AttributeRelationId, AccessShareLock);
pg_attribute_scan = systable_beginscan(pg_attribute_desc,
- AttributeRelidNumIndex,
+ AttributeRelidNumIndexId,
criticalRelcachesBuilt,
SnapshotNow,
2, skey);
@@ -648,15 +553,15 @@ RelationBuildRuleLock(Relation relation)
/*
* open pg_rewrite and begin a scan
*
- * Note: since we scan the rules using RewriteRelRulenameIndex, we will
- * be reading the rules in name order, except possibly during
+ * Note: since we scan the rules using RewriteRelRulenameIndexId,
+ * we will be reading the rules in name order, except possibly during
* emergency-recovery operations (ie, IsIgnoringSystemIndexes). This
* in turn ensures that rules will be fired in name order.
*/
- rewrite_desc = heap_openr(RewriteRelationName, AccessShareLock);
+ rewrite_desc = heap_open(RewriteRelationId, AccessShareLock);
rewrite_tupdesc = RelationGetDescr(rewrite_desc);
rewrite_scan = systable_beginscan(rewrite_desc,
- RewriteRelRulenameIndex,
+ RewriteRelRulenameIndexId,
true, SnapshotNow,
1, &key);
@@ -788,8 +693,7 @@ equalRuleLocks(RuleLock *rlock1, RuleLock *rlock2)
* --------------------------------
*/
static Relation
-RelationBuildDesc(RelationBuildDescInfo buildinfo,
- Relation oldrelation)
+RelationBuildDesc(Oid targetRelId, Relation oldrelation)
{
Relation relation;
Oid relid;
@@ -800,7 +704,7 @@ RelationBuildDesc(RelationBuildDescInfo buildinfo,
/*
* find the tuple in pg_class corresponding to the given relation id
*/
- pg_class_tuple = ScanPgRelation(buildinfo, true);
+ pg_class_tuple = ScanPgRelation(targetRelId, true);
/*
* if no such tuple exists, return NULL
@@ -844,7 +748,7 @@ RelationBuildDesc(RelationBuildDescInfo buildinfo,
/*
* initialize the tuple descriptor (relation->rd_att).
*/
- RelationBuildTupleDesc(buildinfo, relation);
+ RelationBuildTupleDesc(relation);
/*
* Fetch rules and triggers that affect this relation
@@ -1191,9 +1095,8 @@ LookupOpclassInfo(Oid operatorClassOid,
Anum_pg_amop_amopsubtype,
BTEqualStrategyNumber, F_OIDEQ,
ObjectIdGetDatum(InvalidOid));
- rel = heap_openr(AccessMethodOperatorRelationName,
- AccessShareLock);
- scan = systable_beginscan(rel, AccessMethodStrategyIndex, indexOK,
+ rel = heap_open(AccessMethodOperatorRelationId, AccessShareLock);
+ scan = systable_beginscan(rel, AccessMethodStrategyIndexId, indexOK,
SnapshotNow, 2, skey);
while (HeapTupleIsValid(htup = systable_getnext(scan)))
@@ -1226,9 +1129,8 @@ LookupOpclassInfo(Oid operatorClassOid,
Anum_pg_amproc_amprocsubtype,
BTEqualStrategyNumber, F_OIDEQ,
ObjectIdGetDatum(InvalidOid));
- rel = heap_openr(AccessMethodProcedureRelationName,
- AccessShareLock);
- scan = systable_beginscan(rel, AccessMethodProcedureIndex, indexOK,
+ rel = heap_open(AccessMethodProcedureRelationId, AccessShareLock);
+ scan = systable_beginscan(rel, AccessMethodProcedureIndexId, indexOK,
SnapshotNow, 2, skey);
while (HeapTupleIsValid(htup = systable_getnext(scan)))
@@ -1441,35 +1343,6 @@ RelationIdCacheGetRelation(Oid relationId)
}
/*
- * RelationSysNameCacheGetRelation
- *
- * As above, but lookup by name; only works for system catalogs.
- */
-static Relation
-RelationSysNameCacheGetRelation(const char *relationName)
-{
- Relation rd;
- NameData name;
-
- /*
- * make sure that the name key used for hash lookup is properly
- * null-padded
- */
- namestrcpy(&name, relationName);
- RelationSysNameCacheLookup(NameStr(name), rd);
-
- if (RelationIsValid(rd))
- {
- RelationIncrementReferenceCount(rd);
- /* revalidate nailed index if necessary */
- if (!rd->rd_isvalid)
- RelationReloadClassinfo(rd);
- }
-
- return rd;
-}
-
-/*
* RelationIdGetRelation
*
* Lookup a reldesc by OID; make one if not already in cache.
@@ -1482,7 +1355,6 @@ Relation
RelationIdGetRelation(Oid relationId)
{
Relation rd;
- RelationBuildDescInfo buildinfo;
/*
* first try and get a reldesc from the cache
@@ -1495,41 +1367,7 @@ RelationIdGetRelation(Oid relationId)
* no reldesc in the cache, so have RelationBuildDesc() build one and
* add it.
*/
- buildinfo.infotype = INFO_RELID;
- buildinfo.i.info_id = relationId;
-
- rd = RelationBuildDesc(buildinfo, NULL);
- if (RelationIsValid(rd))
- RelationIncrementReferenceCount(rd);
- return rd;
-}
-
-/*
- * RelationSysNameGetRelation
- *
- * As above, but lookup by name; only works for system catalogs.
- */
-Relation
-RelationSysNameGetRelation(const char *relationName)
-{
- Relation rd;
- RelationBuildDescInfo buildinfo;
-
- /*
- * first try and get a reldesc from the cache
- */
- rd = RelationSysNameCacheGetRelation(relationName);
- if (RelationIsValid(rd))
- return rd;
-
- /*
- * no reldesc in the cache, so have RelationBuildDesc() build one and
- * add it.
- */
- buildinfo.infotype = INFO_RELNAME;
- buildinfo.i.info_name = (char *) relationName;
-
- rd = RelationBuildDesc(buildinfo, NULL);
+ rd = RelationBuildDesc(relationId, NULL);
if (RelationIsValid(rd))
RelationIncrementReferenceCount(rd);
return rd;
@@ -1612,7 +1450,6 @@ RelationClose(Relation relation)
static void
RelationReloadClassinfo(Relation relation)
{
- RelationBuildDescInfo buildinfo;
bool indexOK;
HeapTuple pg_class_tuple;
Form_pg_class relp;
@@ -1620,19 +1457,17 @@ RelationReloadClassinfo(Relation relation)
/* Should be called only for invalidated nailed indexes */
Assert(relation->rd_isnailed && !relation->rd_isvalid &&
relation->rd_rel->relkind == RELKIND_INDEX);
- /* Read the pg_class row */
- buildinfo.infotype = INFO_RELID;
- buildinfo.i.info_id = relation->rd_id;
-
/*
+ * Read the pg_class row
+ *
* Don't try to use an indexscan of pg_class_oid_index to reload the
* info for pg_class_oid_index ...
*/
- indexOK = strcmp(RelationGetRelationName(relation), ClassOidIndex) != 0;
- pg_class_tuple = ScanPgRelation(buildinfo, indexOK);
+ indexOK = (RelationGetRelid(relation) != ClassOidIndexId);
+ pg_class_tuple = ScanPgRelation(RelationGetRelid(relation), indexOK);
if (!HeapTupleIsValid(pg_class_tuple))
elog(ERROR, "could not find tuple for system relation %u",
- relation->rd_id);
+ RelationGetRelid(relation));
relp = (Form_pg_class) GETSTRUCT(pg_class_tuple);
memcpy((char *) relation->rd_rel, (char *) relp, CLASS_TUPLE_SIZE);
/* Now we can recalculate physical address */
@@ -1750,17 +1585,14 @@ RelationClearRelation(Relation relation, bool rebuild)
* is good because whatever ref counts the entry may have do not
* necessarily belong to that resource owner.
*/
+ Oid save_relid = RelationGetRelid(relation);
int old_refcnt = relation->rd_refcnt;
SubTransactionId old_createSubid = relation->rd_createSubid;
TupleDesc old_att = relation->rd_att;
RuleLock *old_rules = relation->rd_rules;
MemoryContext old_rulescxt = relation->rd_rulescxt;
- RelationBuildDescInfo buildinfo;
- buildinfo.infotype = INFO_RELID;
- buildinfo.i.info_id = RelationGetRelid(relation);
-
- if (RelationBuildDesc(buildinfo, relation) != relation)
+ if (RelationBuildDesc(save_relid, relation) != relation)
{
/* Should only get here if relation was deleted */
flush_rowtype_cache(old_reltype);
@@ -1768,8 +1600,7 @@ RelationClearRelation(Relation relation, bool rebuild)
if (old_rulescxt)
MemoryContextDelete(old_rulescxt);
pfree(relation);
- elog(ERROR, "relation %u deleted while still in use",
- buildinfo.i.info_id);
+ elog(ERROR, "relation %u deleted while still in use", save_relid);
}
relation->rd_refcnt = old_refcnt;
relation->rd_createSubid = old_createSubid;
@@ -1952,8 +1783,7 @@ RelationCacheInvalidate(void)
if (relation->rd_isnailed &&
relation->rd_rel->relkind == RELKIND_INDEX)
{
- if (strcmp(RelationGetRelationName(relation),
- ClassOidIndex) == 0)
+ if (RelationGetRelid(relation) == ClassOidIndexId)
rebuildFirstList = lcons(relation, rebuildFirstList);
else
rebuildFirstList = lappend(rebuildFirstList, relation);
@@ -2319,11 +2149,6 @@ RelationCacheInitialize(void)
* create hashtables that index the relcache
*/
MemSet(&ctl, 0, sizeof(ctl));
- ctl.keysize = sizeof(NameData);
- ctl.entrysize = sizeof(RelNameCacheEnt);
- RelationSysNameCache = hash_create("Relcache by name", INITRELCACHESIZE,
- &ctl, HASH_ELEM);
-
ctl.keysize = sizeof(Oid);
ctl.entrysize = sizeof(RelIdCacheEnt);
ctl.hash = tag_hash;
@@ -2338,13 +2163,13 @@ RelationCacheInitialize(void)
if (IsBootstrapProcessingMode() ||
!load_relcache_init_file())
{
- formrdesc(RelationRelationName, PG_CLASS_RELTYPE_OID,
+ formrdesc("pg_class", PG_CLASS_RELTYPE_OID,
true, Natts_pg_class, Desc_pg_class);
- formrdesc(AttributeRelationName, PG_ATTRIBUTE_RELTYPE_OID,
+ formrdesc("pg_attribute", PG_ATTRIBUTE_RELTYPE_OID,
false, Natts_pg_attribute, Desc_pg_attribute);
- formrdesc(ProcedureRelationName, PG_PROC_RELTYPE_OID,
+ formrdesc("pg_proc", PG_PROC_RELTYPE_OID,
true, Natts_pg_proc, Desc_pg_proc);
- formrdesc(TypeRelationName, PG_TYPE_RELTYPE_OID,
+ formrdesc("pg_type", PG_TYPE_RELTYPE_OID,
true, Natts_pg_type, Desc_pg_type);
#define NUM_CRITICAL_RELS 4 /* fix if you change list above */
@@ -2393,27 +2218,23 @@ RelationCacheInitializePhase2(void)
*/
if (!criticalRelcachesBuilt)
{
- RelationBuildDescInfo buildinfo;
Relation ird;
-#define LOAD_CRIT_INDEX(indname) \
+#define LOAD_CRIT_INDEX(indexoid) \
do { \
- buildinfo.infotype = INFO_RELNAME; \
- buildinfo.i.info_name = (indname); \
- ird = RelationBuildDesc(buildinfo, NULL); \
+ ird = RelationBuildDesc((indexoid), NULL); \
ird->rd_isnailed = true; \
ird->rd_refcnt = 1; \
} while (0)
- LOAD_CRIT_INDEX(ClassNameNspIndex);
- LOAD_CRIT_INDEX(ClassOidIndex);
- LOAD_CRIT_INDEX(AttributeRelidNumIndex);
- LOAD_CRIT_INDEX(IndexRelidIndex);
- LOAD_CRIT_INDEX(AccessMethodStrategyIndex);
- LOAD_CRIT_INDEX(AccessMethodProcedureIndex);
- LOAD_CRIT_INDEX(OperatorOidIndex);
+ LOAD_CRIT_INDEX(ClassOidIndexId);
+ LOAD_CRIT_INDEX(AttributeRelidNumIndexId);
+ LOAD_CRIT_INDEX(IndexRelidIndexId);
+ LOAD_CRIT_INDEX(AccessMethodStrategyIndexId);
+ LOAD_CRIT_INDEX(AccessMethodProcedureIndexId);
+ LOAD_CRIT_INDEX(OperatorOidIndexId);
-#define NUM_CRITICAL_INDEXES 7 /* fix if you change list above */
+#define NUM_CRITICAL_INDEXES 6 /* fix if you change list above */
criticalRelcachesBuilt = true;
}
@@ -2510,7 +2331,7 @@ RelationCacheInitializePhase3(void)
* fields of pg_index before we have the standard catalog caches available.
* We use predefined data that's set up in just the same way as the
* bootstrapped reldescs used by formrdesc(). The resulting tupdesc is
- * not 100% kosher: it does not have the correct relation OID in attrelid,
+ * not 100% kosher: it does not have the correct rowtype OID in tdtypeid,
* nor does it have a TupleConstr field. But it's good enough for the
* purpose of extracting fields.
*/
@@ -2569,8 +2390,8 @@ AttrDefaultFetch(Relation relation)
BTEqualStrategyNumber, F_OIDEQ,
ObjectIdGetDatum(RelationGetRelid(relation)));
- adrel = heap_openr(AttrDefaultRelationName, AccessShareLock);
- adscan = systable_beginscan(adrel, AttrDefaultIndex, true,
+ adrel = heap_open(AttrDefaultRelationId, AccessShareLock);
+ adscan = systable_beginscan(adrel, AttrDefaultIndexId, true,
SnapshotNow, 1, &skey);
found = 0;
@@ -2634,8 +2455,8 @@ CheckConstraintFetch(Relation relation)
BTEqualStrategyNumber, F_OIDEQ,
ObjectIdGetDatum(RelationGetRelid(relation)));
- conrel = heap_openr(ConstraintRelationName, AccessShareLock);
- conscan = systable_beginscan(conrel, ConstraintRelidIndex, true,
+ conrel = heap_open(ConstraintRelationId, AccessShareLock);
+ conscan = systable_beginscan(conrel, ConstraintRelidIndexId, true,
SnapshotNow, 1, skey);
while (HeapTupleIsValid(htup = systable_getnext(conscan)))
@@ -2725,8 +2546,8 @@ RelationGetIndexList(Relation relation)
BTEqualStrategyNumber, F_OIDEQ,
ObjectIdGetDatum(RelationGetRelid(relation)));
- indrel = heap_openr(IndexRelationName, AccessShareLock);
- indscan = systable_beginscan(indrel, IndexIndrelidIndex, true,
+ indrel = heap_open(IndexRelationId, AccessShareLock);
+ indscan = systable_beginscan(indrel, IndexIndrelidIndexId, true,
SnapshotNow, 1, &skey);
while (HeapTupleIsValid(htup = systable_getnext(indscan)))
diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c
index b7b7ec249d3..0cea023bb90 100644
--- a/src/backend/utils/cache/syscache.c
+++ b/src/backend/utils/cache/syscache.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/cache/syscache.c,v 1.97 2005/03/29 00:17:12 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/cache/syscache.c,v 1.98 2005/04/14 20:03:26 tgl Exp $
*
* NOTES
* These routines allow the parser/planner/executor to perform
@@ -23,7 +23,6 @@
#include "access/heapam.h"
#include "access/transam.h"
#include "utils/builtins.h"
-#include "catalog/catname.h"
#include "catalog/indexing.h"
#include "catalog/pg_aggregate.h"
#include "catalog/pg_amop.h"
@@ -57,7 +56,7 @@
Add your entry to the cacheinfo[] array below. All cache lists are
alphabetical, so add it in the proper place. Specify the relation
- name, index name, number of keys, and key attribute numbers. If the
+ OID, index OID, number of keys, and key attribute numbers. If the
relation contains tuples that are associated with a particular relation
(for example, its attributes, rules, triggers, etc) then specify the
attribute number that contains the OID of the associated relation.
@@ -66,18 +65,18 @@
There must be a unique index underlying each syscache (ie, an index
whose key is the same as that of the cache). If there is not one
- already, add definitions for it to include/catalog/indexing.h: you
- need a #define for the index name and a DECLARE_UNIQUE_INDEX macro
- with the actual declaration. (This will require a catversion.h update,
- while simply adding/deleting caches only requires a recompile.)
+ already, add definitions for it to include/catalog/indexing.h: you need
+ to add a DECLARE_UNIQUE_INDEX macro and a #define for the index OID.
+ (Adding an index requires a catversion.h update, while simply
+ adding/deleting caches only requires a recompile.)
Finally, any place your relation gets heap_insert() or
- heap_update calls, make sure there is a CatalogUpdateIndexes() or
+ heap_update() calls, make sure there is a CatalogUpdateIndexes() or
similar call. The heap_* calls do not update indexes.
bjm 1999/11/22
- ---------------------------------------------------------------------------
+*---------------------------------------------------------------------------
*/
/*
@@ -85,16 +84,16 @@
*/
struct cachedesc
{
- const char *name; /* name of the relation being cached */
- const char *indname; /* name of index relation for this cache */
+ Oid reloid; /* OID of the relation being cached */
+ Oid indoid; /* OID of index relation for this cache */
int reloidattr; /* attr number of rel OID reference, or 0 */
int nkeys; /* # of keys needed for cache lookup */
int key[4]; /* attribute numbers of key attrs */
};
static const struct cachedesc cacheinfo[] = {
- {AggregateRelationName, /* AGGFNOID */
- AggregateFnoidIndex,
+ {AggregateRelationId, /* AGGFNOID */
+ AggregateFnoidIndexId,
0,
1,
{
@@ -103,8 +102,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {AccessMethodRelationName, /* AMNAME */
- AmNameIndex,
+ {AccessMethodRelationId, /* AMNAME */
+ AmNameIndexId,
0,
1,
{
@@ -113,8 +112,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {AccessMethodRelationName, /* AMOID */
- AmOidIndex,
+ {AccessMethodRelationId, /* AMOID */
+ AmOidIndexId,
0,
1,
{
@@ -123,8 +122,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {AccessMethodOperatorRelationName, /* AMOPOPID */
- AccessMethodOperatorIndex,
+ {AccessMethodOperatorRelationId, /* AMOPOPID */
+ AccessMethodOperatorIndexId,
0,
2,
{
@@ -133,8 +132,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {AccessMethodOperatorRelationName, /* AMOPSTRATEGY */
- AccessMethodStrategyIndex,
+ {AccessMethodOperatorRelationId, /* AMOPSTRATEGY */
+ AccessMethodStrategyIndexId,
0,
3,
{
@@ -143,8 +142,8 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_amop_amopstrategy,
0
}},
- {AccessMethodProcedureRelationName, /* AMPROCNUM */
- AccessMethodProcedureIndex,
+ {AccessMethodProcedureRelationId, /* AMPROCNUM */
+ AccessMethodProcedureIndexId,
0,
3,
{
@@ -153,8 +152,8 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_amproc_amprocnum,
0
}},
- {AttributeRelationName, /* ATTNAME */
- AttributeRelidNameIndex,
+ {AttributeRelationId, /* ATTNAME */
+ AttributeRelidNameIndexId,
Anum_pg_attribute_attrelid,
2,
{
@@ -163,8 +162,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {AttributeRelationName, /* ATTNUM */
- AttributeRelidNumIndex,
+ {AttributeRelationId, /* ATTNUM */
+ AttributeRelidNumIndexId,
Anum_pg_attribute_attrelid,
2,
{
@@ -174,8 +173,8 @@ static const struct cachedesc cacheinfo[] = {
0
}},
{
- CastRelationName, /* CASTSOURCETARGET */
- CastSourceTargetIndex,
+ CastRelationId, /* CASTSOURCETARGET */
+ CastSourceTargetIndexId,
0,
2,
{
@@ -184,8 +183,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {OperatorClassRelationName, /* CLAAMNAMENSP */
- OpclassAmNameNspIndex,
+ {OperatorClassRelationId, /* CLAAMNAMENSP */
+ OpclassAmNameNspIndexId,
0,
3,
{
@@ -194,8 +193,8 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_opclass_opcnamespace,
0
}},
- {OperatorClassRelationName, /* CLAOID */
- OpclassOidIndex,
+ {OperatorClassRelationId, /* CLAOID */
+ OpclassOidIndexId,
0,
1,
{
@@ -204,8 +203,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {ConversionRelationName, /* CONDEFAULT */
- ConversionDefaultIndex,
+ {ConversionRelationId, /* CONDEFAULT */
+ ConversionDefaultIndexId,
0,
4,
{
@@ -214,8 +213,8 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_conversion_contoencoding,
ObjectIdAttributeNumber,
}},
- {ConversionRelationName, /* CONNAMENSP */
- ConversionNameNspIndex,
+ {ConversionRelationId, /* CONNAMENSP */
+ ConversionNameNspIndexId,
0,
2,
{
@@ -224,8 +223,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {ConversionRelationName, /* CONOID */
- ConversionOidIndex,
+ {ConversionRelationId, /* CONOID */
+ ConversionOidIndexId,
0,
1,
{
@@ -234,8 +233,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {GroupRelationName, /* GRONAME */
- GroupNameIndex,
+ {GroupRelationId, /* GRONAME */
+ GroupNameIndexId,
0,
1,
{
@@ -244,8 +243,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {GroupRelationName, /* GROSYSID */
- GroupSysidIndex,
+ {GroupRelationId, /* GROSYSID */
+ GroupSysidIndexId,
0,
1,
{
@@ -254,8 +253,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {IndexRelationName, /* INDEXRELID */
- IndexRelidIndex,
+ {IndexRelationId, /* INDEXRELID */
+ IndexRelidIndexId,
Anum_pg_index_indrelid,
1,
{
@@ -264,8 +263,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {InheritsRelationName, /* INHRELID */
- InheritsRelidSeqnoIndex,
+ {InheritsRelationId, /* INHRELID */
+ InheritsRelidSeqnoIndexId,
Anum_pg_inherits_inhrelid,
2,
{
@@ -274,8 +273,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {LanguageRelationName, /* LANGNAME */
- LanguageNameIndex,
+ {LanguageRelationId, /* LANGNAME */
+ LanguageNameIndexId,
0,
1,
{
@@ -284,8 +283,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {LanguageRelationName, /* LANGOID */
- LanguageOidIndex,
+ {LanguageRelationId, /* LANGOID */
+ LanguageOidIndexId,
0,
1,
{
@@ -294,8 +293,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {NamespaceRelationName, /* NAMESPACENAME */
- NamespaceNameIndex,
+ {NamespaceRelationId, /* NAMESPACENAME */
+ NamespaceNameIndexId,
0,
1,
{
@@ -304,8 +303,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {NamespaceRelationName, /* NAMESPACEOID */
- NamespaceOidIndex,
+ {NamespaceRelationId, /* NAMESPACEOID */
+ NamespaceOidIndexId,
0,
1,
{
@@ -314,8 +313,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {OperatorRelationName, /* OPERNAMENSP */
- OperatorNameNspIndex,
+ {OperatorRelationId, /* OPERNAMENSP */
+ OperatorNameNspIndexId,
0,
4,
{
@@ -324,8 +323,8 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_operator_oprright,
Anum_pg_operator_oprnamespace
}},
- {OperatorRelationName, /* OPEROID */
- OperatorOidIndex,
+ {OperatorRelationId, /* OPEROID */
+ OperatorOidIndexId,
0,
1,
{
@@ -334,8 +333,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {ProcedureRelationName, /* PROCNAMEARGSNSP */
- ProcedureNameArgsNspIndex,
+ {ProcedureRelationId, /* PROCNAMEARGSNSP */
+ ProcedureNameArgsNspIndexId,
0,
3,
{
@@ -344,8 +343,8 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_proc_pronamespace,
0
}},
- {ProcedureRelationName, /* PROCOID */
- ProcedureOidIndex,
+ {ProcedureRelationId, /* PROCOID */
+ ProcedureOidIndexId,
0,
1,
{
@@ -354,8 +353,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {RelationRelationName, /* RELNAMENSP */
- ClassNameNspIndex,
+ {RelationRelationId, /* RELNAMENSP */
+ ClassNameNspIndexId,
ObjectIdAttributeNumber,
2,
{
@@ -364,8 +363,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {RelationRelationName, /* RELOID */
- ClassOidIndex,
+ {RelationRelationId, /* RELOID */
+ ClassOidIndexId,
ObjectIdAttributeNumber,
1,
{
@@ -374,8 +373,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {RewriteRelationName, /* RULERELNAME */
- RewriteRelRulenameIndex,
+ {RewriteRelationId, /* RULERELNAME */
+ RewriteRelRulenameIndexId,
Anum_pg_rewrite_ev_class,
2,
{
@@ -384,8 +383,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {ShadowRelationName, /* SHADOWNAME */
- ShadowNameIndex,
+ {ShadowRelationId, /* SHADOWNAME */
+ ShadowNameIndexId,
0,
1,
{
@@ -394,8 +393,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {ShadowRelationName, /* SHADOWSYSID */
- ShadowSysidIndex,
+ {ShadowRelationId, /* SHADOWSYSID */
+ ShadowSysidIndexId,
0,
1,
{
@@ -404,8 +403,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {StatisticRelationName, /* STATRELATT */
- StatisticRelidAttnumIndex,
+ {StatisticRelationId, /* STATRELATT */
+ StatisticRelidAttnumIndexId,
Anum_pg_statistic_starelid,
2,
{
@@ -414,8 +413,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {TypeRelationName, /* TYPENAMENSP */
- TypeNameNspIndex,
+ {TypeRelationId, /* TYPENAMENSP */
+ TypeNameNspIndexId,
Anum_pg_type_typrelid,
2,
{
@@ -424,8 +423,8 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
- {TypeRelationName, /* TYPEOID */
- TypeOidIndex,
+ {TypeRelationId, /* TYPEOID */
+ TypeOidIndexId,
Anum_pg_type_typrelid,
1,
{
@@ -436,8 +435,7 @@ static const struct cachedesc cacheinfo[] = {
}}
};
-static CatCache *SysCache[
- lengthof(cacheinfo)];
+static CatCache *SysCache[lengthof(cacheinfo)];
static int SysCacheSize = lengthof(cacheinfo);
static bool CacheInitialized = false;
@@ -462,14 +460,14 @@ InitCatalogCache(void)
for (cacheId = 0; cacheId < SysCacheSize; cacheId++)
{
SysCache[cacheId] = InitCatCache(cacheId,
- cacheinfo[cacheId].name,
- cacheinfo[cacheId].indname,
+ cacheinfo[cacheId].reloid,
+ cacheinfo[cacheId].indoid,
cacheinfo[cacheId].reloidattr,
cacheinfo[cacheId].nkeys,
cacheinfo[cacheId].key);
if (!PointerIsValid(SysCache[cacheId]))
- elog(ERROR, "could not initialize cache %s (%d)",
- cacheinfo[cacheId].name, cacheId);
+ elog(ERROR, "could not initialize cache %u (%d)",
+ cacheinfo[cacheId].reloid, cacheId);
}
CacheInitialized = true;
}
diff --git a/src/backend/utils/cache/typcache.c b/src/backend/utils/cache/typcache.c
index 7e15f884f61..01990db8ad9 100644
--- a/src/backend/utils/cache/typcache.c
+++ b/src/backend/utils/cache/typcache.c
@@ -36,7 +36,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/cache/typcache.c,v 1.11 2004/12/31 22:01:25 pgsql Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/cache/typcache.c,v 1.12 2005/04/14 20:03:26 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -46,7 +46,6 @@
#include "access/heapam.h"
#include "access/hash.h"
#include "access/nbtree.h"
-#include "catalog/catname.h"
#include "catalog/indexing.h"
#include "catalog/pg_am.h"
#include "catalog/pg_opclass.h"
@@ -328,14 +327,14 @@ lookup_default_opclass(Oid type_id, Oid am_id)
* that we consider all opclasses, regardless of the current search
* path.
*/
- rel = heap_openr(OperatorClassRelationName, AccessShareLock);
+ rel = heap_open(OperatorClassRelationId, AccessShareLock);
ScanKeyInit(&skey[0],
Anum_pg_opclass_opcamid,
BTEqualStrategyNumber, F_OIDEQ,
ObjectIdGetDatum(am_id));
- scan = systable_beginscan(rel, OpclassAmNameNspIndex, true,
+ scan = systable_beginscan(rel, OpclassAmNameNspIndexId, true,
SnapshotNow, 1, skey);
while (HeapTupleIsValid(tup = systable_getnext(scan)))