diff options
author | Tom Lane | 2005-04-14 20:03:27 +0000 |
---|---|---|
committer | Tom Lane | 2005-04-14 20:03:27 +0000 |
commit | 5abc360d6c468b01971330a567d43a428cd0beda (patch) | |
tree | e7e8931cc67896c837039a916236168628c3d757 | |
parent | 5e236b7caf7d09351e07f1847738fcf38fd587f8 (diff) |
Completion of project to use fixed OIDs for all system catalogs and
indexes. Replace all heap_openr and index_openr calls by heap_open
and index_open. Remove runtime lookups of catalog OID numbers in
various places. Remove relcache's support for looking up system
catalogs by name. Bulky but mostly very boring patch ...
71 files changed, 623 insertions, 1159 deletions
diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c index 75ce4c440d..f832573000 100644 --- a/contrib/dblink/dblink.c +++ b/contrib/dblink/dblink.c @@ -36,7 +36,6 @@ #include "funcapi.h" #include "access/tupdesc.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/namespace.h" #include "catalog/pg_index.h" #include "catalog/pg_type.h" @@ -1538,7 +1537,7 @@ get_pkey_attnames(Oid relid, int16 *numatts) *numatts = 0; /* use relid to get all related indexes */ - indexRelation = heap_openr(IndexRelationName, AccessShareLock); + indexRelation = heap_open(IndexRelationId, AccessShareLock); ScanKeyInit(&entry, Anum_pg_index_indrelid, BTEqualStrategyNumber, F_OIDEQ, diff --git a/contrib/intagg/int_aggregate.c b/contrib/intagg/int_aggregate.c index 35c883642b..1c95d64af6 100644 --- a/contrib/intagg/int_aggregate.c +++ b/contrib/intagg/int_aggregate.c @@ -18,7 +18,6 @@ #include <sys/types.h> #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/indexing.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" diff --git a/contrib/miscutil/misc_utils.c b/contrib/miscutil/misc_utils.c index 855addb48e..d595474862 100644 --- a/contrib/miscutil/misc_utils.c +++ b/contrib/miscutil/misc_utils.c @@ -19,7 +19,6 @@ #include "access/relscan.h" #include "access/skey.h" #include "access/tupdesc.h" -#include "catalog/catname.h" #include "catalog/pg_listener.h" #include "commands/async.h" #include "fmgr.h" @@ -75,7 +74,7 @@ active_listeners(text *relname) int ourpid = getpid(); char listen_name[NAMEDATALEN]; - lRel = heap_openr(ListenerRelationName, AccessShareLock); + lRel = heap_open(ListenerRelationId, AccessShareLock); tdesc = RelationGetDescr(lRel); if (relname && (VARSIZE(relname) > VARHDRSZ)) diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 5470555771..de79750ee2 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -14,11 +14,9 @@ * INTERFACE ROUTINES * relation_open - open any relation by relation OID * relation_openrv - open any relation specified by a RangeVar - * relation_openr - open a system relation by name * relation_close - close any relation * heap_open - open a heap relation by relation OID * heap_openrv - open a heap relation specified by a RangeVar - * heap_openr - open a system heap relation by name * heap_close - (now just a macro for relation_close) * heap_beginscan - begin relation scan * heap_rescan - restart a relation scan @@ -503,15 +501,6 @@ relation_openrv(const RangeVar *relation, LOCKMODE lockmode) Oid relOid; /* - * In bootstrap mode, don't do any namespace processing. - */ - if (IsBootstrapProcessingMode()) - { - Assert(relation->schemaname == NULL); - return relation_openr(relation->relname, lockmode); - } - - /* * Check for shared-cache-inval messages before trying to open the * relation. This is needed to cover the case where the name * identifies a rel that has been dropped and recreated since the @@ -534,37 +523,6 @@ relation_openrv(const RangeVar *relation, LOCKMODE lockmode) } /* ---------------- - * relation_openr - open a system relation specified by name. - * - * As above, but the relation is specified by an unqualified name; - * it is assumed to live in the system catalog namespace. - * ---------------- - */ -Relation -relation_openr(const char *sysRelationName, LOCKMODE lockmode) -{ - Relation r; - - Assert(lockmode >= NoLock && lockmode < MAX_LOCKMODES); - - /* - * We assume we should not need to worry about the rel's OID changing, - * hence no need for AcceptInvalidationMessages here. - */ - - /* The relcache does all the real work... */ - r = RelationSysNameGetRelation(sysRelationName); - - if (!RelationIsValid(r)) - elog(ERROR, "could not open relation \"%s\"", sysRelationName); - - if (lockmode != NoLock) - LockRelation(r, lockmode); - - return r; -} - -/* ---------------- * relation_close - close any relation * * If lockmode is not "NoLock", we first release the specified lock. @@ -657,41 +615,6 @@ heap_openrv(const RangeVar *relation, LOCKMODE lockmode) return r; } -/* ---------------- - * heap_openr - open a system heap relation specified by name. - * - * As above, but the relation is specified by an unqualified name; - * it is assumed to live in the system catalog namespace. - * ---------------- - */ -Relation -heap_openr(const char *sysRelationName, LOCKMODE lockmode) -{ - Relation r; - - r = relation_openr(sysRelationName, lockmode); - - if (r->rd_rel->relkind == RELKIND_INDEX) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is an index", - RelationGetRelationName(r)))); - else if (r->rd_rel->relkind == RELKIND_SPECIAL) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is a special relation", - RelationGetRelationName(r)))); - else if (r->rd_rel->relkind == RELKIND_COMPOSITE_TYPE) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is a composite type", - RelationGetRelationName(r)))); - - pgstat_initstats(&r->pgstat_info, r); - - return r; -} - /* ---------------- * heap_beginscan - begin relation scan diff --git a/src/backend/access/index/genam.c b/src/backend/access/index/genam.c index bb41ba590a..d811f631b4 100644 --- a/src/backend/access/index/genam.c +++ b/src/backend/access/index/genam.c @@ -162,7 +162,7 @@ IndexScanEnd(IndexScanDesc scan) * systable_beginscan --- set up for heap-or-index scan * * rel: catalog to scan, already opened and suitably locked - * indexRelname: name of index to conditionally use + * indexId: OID of index to conditionally use * indexOK: if false, forces a heap scan (see notes below) * snapshot: time qual to use (usually should be SnapshotNow) * nkeys, key: scan keys @@ -179,7 +179,7 @@ IndexScanEnd(IndexScanDesc scan) */ SysScanDesc systable_beginscan(Relation heapRelation, - const char *indexRelname, + Oid indexId, bool indexOK, Snapshot snapshot, int nkeys, ScanKey key) @@ -187,18 +187,10 @@ systable_beginscan(Relation heapRelation, SysScanDesc sysscan; Relation irel; - if (indexOK && !IsIgnoringSystemIndexes()) - { - /* We assume it's a system index, so index_openr is OK */ - irel = index_openr(indexRelname); - - if (ReindexIsProcessingIndex(RelationGetRelid(irel))) - { - /* oops, can't use index that's being rebuilt */ - index_close(irel); - irel = NULL; - } - } + if (indexOK && + !IsIgnoringSystemIndexes() && + !ReindexIsProcessingIndex(indexId)) + irel = index_open(indexId); else irel = NULL; diff --git a/src/backend/access/index/indexam.c b/src/backend/access/index/indexam.c index 02fccfef9f..f451fd7055 100644 --- a/src/backend/access/index/indexam.c +++ b/src/backend/access/index/indexam.c @@ -13,7 +13,6 @@ * INTERFACE ROUTINES * index_open - open an index relation by relation OID * index_openrv - open an index relation specified by a RangeVar - * index_openr - open a system index relation by name * index_close - close an index relation * index_beginscan - start a scan of an index with amgettuple * index_beginscan_multi - start a scan of an index with amgetmulti @@ -173,31 +172,6 @@ index_openrv(const RangeVar *relation) } /* ---------------- - * index_openr - open a system index relation specified by name. - * - * As above, but the relation is specified by an unqualified name; - * it is assumed to live in the system catalog namespace. - * ---------------- - */ -Relation -index_openr(const char *sysRelationName) -{ - Relation r; - - r = relation_openr(sysRelationName, NoLock); - - if (r->rd_rel->relkind != RELKIND_INDEX) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is not an index", - RelationGetRelationName(r)))); - - pgstat_initstats(&r->pgstat_info, r); - - return r; -} - -/* ---------------- * index_close - close a index relation * * presently the relcache routines do all the work we need diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index 51f1610c41..0e7149e8b3 100644 --- a/src/backend/bootstrap/bootstrap.c +++ b/src/backend/bootstrap/bootstrap.c @@ -26,12 +26,12 @@ #include "access/heapam.h" #include "access/xlog.h" #include "bootstrap/bootstrap.h" -#include "catalog/catname.h" #include "catalog/index.h" #include "catalog/pg_type.h" #include "executor/executor.h" #include "libpq/pqsignal.h" #include "miscadmin.h" +#include "nodes/makefuncs.h" #include "postmaster/bgwriter.h" #include "storage/freespace.h" #include "storage/ipc.h" @@ -46,10 +46,14 @@ #include "utils/ps_status.h" #include "utils/relcache.h" +extern int optind; +extern char *optarg; + #define ALLOC(t, c) ((t *) calloc((unsigned)(c), sizeof(t))) extern int Int_yyparse(void); + static void usage(void); static void bootstrap_signals(void); static hashnode *AddStr(char *str, int strlength, int mderef); @@ -169,17 +173,12 @@ static struct typmap *Ap = NULL; static int Warnings = 0; static char Blanks[MAXATTR]; -static char *relname; /* current relation name */ - Form_pg_attribute attrtypes[MAXATTR]; /* points to attribute info */ static Datum values[MAXATTR]; /* corresponding attribute values */ int numattr; /* number of attributes for cur. rel */ static MemoryContext nogc = NULL; /* special no-gc mem context */ -extern int optind; -extern char *optarg; - /* * At bootstrap time, we first declare all the indices to be built, and * then build them. The IndexList structure stores enough information @@ -572,12 +571,12 @@ boot_openrel(char *relname) HeapScanDesc scan; HeapTuple tup; - if (strlen(relname) >= NAMEDATALEN - 1) + if (strlen(relname) >= NAMEDATALEN) relname[NAMEDATALEN - 1] = '\0'; if (Typ == NULL) { - rel = heap_openr(TypeRelationName, NoLock); + rel = heap_open(TypeRelationId, NoLock); scan = heap_beginscan(rel, SnapshotNow, 0, NULL); i = 0; while ((tup = heap_getnext(scan, ForwardScanDirection)) != NULL) @@ -605,10 +604,9 @@ boot_openrel(char *relname) closerel(NULL); elog(DEBUG4, "open relation %s, attrsize %d", - relname ? relname : "(null)", - (int) ATTRIBUTE_TUPLE_SIZE); + relname, (int) ATTRIBUTE_TUPLE_SIZE); - boot_reldesc = heap_openr(relname, NoLock); + boot_reldesc = heap_openrv(makeRangeVar(NULL, relname), NoLock); numattr = boot_reldesc->rd_rel->relnatts; for (i = 0; i < numattr; i++) { @@ -641,7 +639,7 @@ closerel(char *name) { if (strcmp(RelationGetRelationName(boot_reldesc), name) != 0) elog(ERROR, "close of %s when %s was expected", - name, relname ? relname : "(null)"); + name, RelationGetRelationName(boot_reldesc)); } else elog(ERROR, "close of %s before any relation was opened", @@ -652,7 +650,8 @@ closerel(char *name) elog(ERROR, "no open relation to close"); else { - elog(DEBUG4, "close relation %s", relname ? relname : "(null)"); + elog(DEBUG4, "close relation %s", + RelationGetRelationName(boot_reldesc)); heap_close(boot_reldesc, NoLock); boot_reldesc = NULL; } @@ -676,7 +675,7 @@ DefineAttr(char *name, char *type, int attnum) if (boot_reldesc != NULL) { elog(WARNING, "no open relations allowed with CREATE command"); - closerel(relname); + closerel(NULL); } if (attrtypes[attnum] == NULL) @@ -933,7 +932,7 @@ gettype(char *type) return i; } elog(DEBUG4, "external type: %s", type); - rel = heap_openr(TypeRelationName, NoLock); + rel = heap_open(TypeRelationId, NoLock); scan = heap_beginscan(rel, SnapshotNow, 0, NULL); i = 0; while ((tup = heap_getnext(scan, ForwardScanDirection)) != NULL) diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c index 021bb70366..451a931651 100644 --- a/src/backend/catalog/aclchk.c +++ b/src/backend/catalog/aclchk.c @@ -19,7 +19,6 @@ #include "access/heapam.h" #include "catalog/catalog.h" -#include "catalog/catname.h" #include "catalog/indexing.h" #include "catalog/namespace.h" #include "catalog/pg_conversion.h" @@ -270,7 +269,7 @@ ExecuteGrantStmt_Relation(GrantStmt *stmt) char replaces[Natts_pg_class]; /* open pg_class */ - relation = heap_openr(RelationRelationName, RowExclusiveLock); + relation = heap_open(RelationRelationId, RowExclusiveLock); relOid = RangeVarGetRelid(relvar, false); tuple = SearchSysCache(RELOID, ObjectIdGetDatum(relOid), @@ -438,7 +437,7 @@ ExecuteGrantStmt_Database(GrantStmt *stmt) char nulls[Natts_pg_database]; char replaces[Natts_pg_database]; - relation = heap_openr(DatabaseRelationName, RowExclusiveLock); + relation = heap_open(DatabaseRelationId, RowExclusiveLock); ScanKeyInit(&entry[0], Anum_pg_database_datname, BTEqualStrategyNumber, F_NAMEEQ, @@ -597,7 +596,7 @@ ExecuteGrantStmt_Function(GrantStmt *stmt) oid = LookupFuncNameTypeNames(func->funcname, func->funcargs, false); - relation = heap_openr(ProcedureRelationName, RowExclusiveLock); + relation = heap_open(ProcedureRelationId, RowExclusiveLock); tuple = SearchSysCache(PROCOID, ObjectIdGetDatum(oid), 0, 0, 0); @@ -748,7 +747,7 @@ ExecuteGrantStmt_Language(GrantStmt *stmt) char nulls[Natts_pg_language]; char replaces[Natts_pg_language]; - relation = heap_openr(LanguageRelationName, RowExclusiveLock); + relation = heap_open(LanguageRelationId, RowExclusiveLock); tuple = SearchSysCache(LANGNAME, PointerGetDatum(langname), 0, 0, 0); @@ -911,7 +910,7 @@ ExecuteGrantStmt_Namespace(GrantStmt *stmt) char nulls[Natts_pg_namespace]; char replaces[Natts_pg_namespace]; - relation = heap_openr(NamespaceRelationName, RowExclusiveLock); + relation = heap_open(NamespaceRelationId, RowExclusiveLock); tuple = SearchSysCache(NAMESPACENAME, CStringGetDatum(nspname), 0, 0, 0); @@ -1067,7 +1066,7 @@ ExecuteGrantStmt_Tablespace(GrantStmt *stmt) char nulls[Natts_pg_tablespace]; char replaces[Natts_pg_tablespace]; - relation = heap_openr(TableSpaceRelationName, RowExclusiveLock); + relation = heap_open(TableSpaceRelationId, RowExclusiveLock); ScanKeyInit(&entry[0], Anum_pg_tablespace_spcname, BTEqualStrategyNumber, F_NAMEEQ, @@ -1455,7 +1454,7 @@ pg_database_aclmask(Oid db_oid, AclId userid, * * There's no syscache for pg_database, so must look the hard way */ - pg_database = heap_openr(DatabaseRelationName, AccessShareLock); + pg_database = heap_open(DatabaseRelationId, AccessShareLock); ScanKeyInit(&entry[0], ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, @@ -1726,7 +1725,7 @@ pg_tablespace_aclmask(Oid spc_oid, AclId userid, * * There's no syscache for pg_tablespace, so must look the hard way */ - pg_tablespace = heap_openr(TableSpaceRelationName, AccessShareLock); + pg_tablespace = heap_open(TableSpaceRelationId, AccessShareLock); ScanKeyInit(&entry[0], ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, @@ -2002,7 +2001,7 @@ pg_tablespace_ownercheck(Oid spc_oid, AclId userid) return true; /* There's no syscache for pg_tablespace, so must look the hard way */ - pg_tablespace = heap_openr(TableSpaceRelationName, AccessShareLock); + pg_tablespace = heap_open(TableSpaceRelationId, AccessShareLock); ScanKeyInit(&entry[0], ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, @@ -2070,7 +2069,7 @@ pg_database_ownercheck(Oid db_oid, AclId userid) return true; /* There's no syscache for pg_database, so must look the hard way */ - pg_database = heap_openr(DatabaseRelationName, AccessShareLock); + pg_database = heap_open(DatabaseRelationId, AccessShareLock); ScanKeyInit(&entry[0], ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, diff --git a/src/backend/catalog/catalog.c b/src/backend/catalog/catalog.c index dc845aec6a..68c7e64188 100644 --- a/src/backend/catalog/catalog.c +++ b/src/backend/catalog/catalog.c @@ -18,7 +18,6 @@ #include "access/transam.h" #include "catalog/catalog.h" -#include "catalog/catname.h" #include "catalog/pg_namespace.h" #include "catalog/pg_tablespace.h" #include "miscadmin.h" diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index 5a27d5abd1..f6fd1d3a55 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -16,7 +16,6 @@ #include "access/genam.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/heap.h" #include "catalog/index.h" @@ -28,7 +27,9 @@ #include "catalog/pg_conversion.h" #include "catalog/pg_depend.h" #include "catalog/pg_language.h" +#include "catalog/pg_namespace.h" #include "catalog/pg_opclass.h" +#include "catalog/pg_operator.h" #include "catalog/pg_proc.h" #include "catalog/pg_rewrite.h" #include "catalog/pg_trigger.h" @@ -65,14 +66,25 @@ typedef struct List *rtables; /* list of rangetables to resolve Vars */ } find_expr_references_context; - /* - * Because not all system catalogs have predetermined OIDs, we build a table - * mapping between ObjectClasses and OIDs. This is done at most once per - * backend run, to minimize lookup overhead. + * This constant table maps ObjectClasses to the corresponding catalog OIDs. + * See also getObjectClass(). */ -static bool object_classes_initialized = false; -static Oid object_classes[MAX_OCLASS]; +static const Oid object_classes[MAX_OCLASS] = { + RelationRelationId, /* OCLASS_CLASS */ + ProcedureRelationId, /* OCLASS_PROC */ + TypeRelationId, /* OCLASS_TYPE */ + CastRelationId, /* OCLASS_CAST */ + ConstraintRelationId, /* OCLASS_CONSTRAINT */ + ConversionRelationId, /* OCLASS_CONVERSION */ + AttrDefaultRelationId, /* OCLASS_DEFAULT */ + LanguageRelationId, /* OCLASS_LANGUAGE */ + OperatorRelationId, /* OCLASS_OPERATOR */ + OperatorClassRelationId, /* OCLASS_OPCLASS */ + RewriteRelationId, /* OCLASS_REWRITE */ + TriggerRelationId, /* OCLASS_TRIGGER */ + NamespaceRelationId /* OCLASS_SCHEMA */ +}; static void findAutoDeletableObjects(const ObjectAddress *object, @@ -103,7 +115,6 @@ static void add_exact_object_address(const ObjectAddress *object, static bool object_address_present(const ObjectAddress *object, ObjectAddresses *addrs); static void term_object_addresses(ObjectAddresses *addrs); -static void init_object_classes(void); static void getRelationDescription(StringInfo buffer, Oid relid); @@ -135,7 +146,7 @@ performDeletion(const ObjectAddress *object, * We save some cycles by opening pg_depend just once and passing the * Relation pointer down to all the recursive deletion steps. */ - depRel = heap_openr(DependRelationName, RowExclusiveLock); + depRel = heap_open(DependRelationId, RowExclusiveLock); /* * Construct a list of objects that are reachable by AUTO or INTERNAL @@ -189,7 +200,7 @@ deleteWhatDependsOn(const ObjectAddress *object, * We save some cycles by opening pg_depend just once and passing the * Relation pointer down to all the recursive deletion steps. */ - depRel = heap_openr(DependRelationName, RowExclusiveLock); + depRel = heap_open(DependRelationId, RowExclusiveLock); /* * Construct a list of objects that are reachable by AUTO or INTERNAL @@ -282,7 +293,7 @@ findAutoDeletableObjects(const ObjectAddress *object, else nkeys = 2; - scan = systable_beginscan(depRel, DependReferenceIndex, true, + scan = systable_beginscan(depRel, DependReferenceIndexId, true, SnapshotNow, nkeys, key); while (HeapTupleIsValid(tup = systable_getnext(scan))) @@ -417,7 +428,7 @@ recursiveDeletion(const ObjectAddress *object, else nkeys = 2; - scan = systable_beginscan(depRel, DependDependerIndex, true, + scan = systable_beginscan(depRel, DependDependerIndexId, true, SnapshotNow, nkeys, key); while (HeapTupleIsValid(tup = systable_getnext(scan))) @@ -650,7 +661,7 @@ deleteDependentObjects(const ObjectAddress *object, else nkeys = 2; - scan = systable_beginscan(depRel, DependReferenceIndex, true, + scan = systable_beginscan(depRel, DependReferenceIndexId, true, SnapshotNow, nkeys, key); while (HeapTupleIsValid(tup = systable_getnext(scan))) @@ -1203,11 +1214,6 @@ init_object_addresses(ObjectAddresses *addrs) addrs->maxrefs = 32; /* arbitrary initial array size */ addrs->refs = (ObjectAddress *) palloc(addrs->maxrefs * sizeof(ObjectAddress)); - - /* Initialize object_classes[] if not done yet */ - /* This will be needed by add_object_address() */ - if (!object_classes_initialized) - init_object_classes(); } /* @@ -1298,41 +1304,14 @@ term_object_addresses(ObjectAddresses *addrs) } /* - * Initialize the object_classes[] table. - * - * Although some of these OIDs aren't compile-time constants, they surely - * shouldn't change during a backend's run. So, we look them up the - * first time through and then cache them. - */ -static void -init_object_classes(void) -{ - object_classes[OCLASS_CLASS] = RelationRelationId; - object_classes[OCLASS_PROC] = ProcedureRelationId; - object_classes[OCLASS_TYPE] = TypeRelationId; - object_classes[OCLASS_CAST] = get_system_catalog_relid(CastRelationName); - object_classes[OCLASS_CONSTRAINT] = get_system_catalog_relid(ConstraintRelationName); - object_classes[OCLASS_CONVERSION] = get_system_catalog_relid(ConversionRelationName); - object_classes[OCLASS_DEFAULT] = get_system_catalog_relid(AttrDefaultRelationName); - object_classes[OCLASS_LANGUAGE] = get_system_catalog_relid(LanguageRelationName); - object_classes[OCLASS_OPERATOR] = get_system_catalog_relid(OperatorRelationName); - object_classes[OCLASS_OPCLASS] = get_system_catalog_relid(OperatorClassRelationName); - object_classes[OCLASS_REWRITE] = get_system_catalog_relid(RewriteRelationName); - object_classes[OCLASS_TRIGGER] = get_system_catalog_relid(TriggerRelationName); - object_classes[OCLASS_SCHEMA] = get_system_catalog_relid(NamespaceRelationName); - object_classes_initialized = true; -} - -/* * Determine the class of a given object identified by objectAddress. * - * This function is needed just because some of the system catalogs do - * not have hardwired-at-compile-time OIDs. + * This function is essentially the reverse mapping for the object_classes[] + * table. We implement it as a function because the OIDs aren't consecutive. */ ObjectClass getObjectClass(const ObjectAddress *object) { - /* Easy for the bootstrapped catalogs... */ switch (object->classId) { case RelationRelationId: @@ -1346,65 +1325,49 @@ getObjectClass(const ObjectAddress *object) case TypeRelationId: Assert(object->objectSubId == 0); return OCLASS_TYPE; - } - /* - * Handle cases where catalog's OID is not hardwired. - */ - if (!object_classes_initialized) - init_object_classes(); + case CastRelationId: + Assert(object->objectSubId == 0); + return OCLASS_CAST; - if (object->classId == object_classes[OCLASS_CAST]) - { - Assert(object->objectSubId == 0); - return OCLASS_CAST; - } - if (object->classId == object_classes[OCLASS_CONSTRAINT]) - { - Assert(object->objectSubId == 0); - return OCLASS_CONSTRAINT; - } - if (object->classId == object_classes[OCLASS_CONVERSION]) - { - Assert(object->objectSubId == 0); - return OCLASS_CONVERSION; - } - if (object->classId == object_classes[OCLASS_DEFAULT]) - { - Assert(object->objectSubId == 0); - return OCLASS_DEFAULT; - } - if (object->classId == object_classes[OCLASS_LANGUAGE]) - { - Assert(object->objectSubId == 0); - return OCLASS_LANGUAGE; - } - if (object->classId == object_classes[OCLASS_OPERATOR]) - { - Assert(object->objectSubId == 0); - return OCLASS_OPERATOR; - } - if (object->classId == object_classes[OCLASS_OPCLASS]) - { - Assert(object->objectSubId == 0); - return OCLASS_OPCLASS; - } - if (object->classId == object_classes[OCLASS_REWRITE]) - { - Assert(object->objectSubId == 0); - return OCLASS_REWRITE; - } - if (object->classId == object_classes[OCLASS_TRIGGER]) - { - Assert(object->objectSubId == 0); - return OCLASS_TRIGGER; - } - if (object->classId == object_classes[OCLASS_SCHEMA]) - { - Assert(object->objectSubId == 0); - return OCLASS_SCHEMA; + case ConstraintRelationId: + Assert(object->objectSubId == 0); + return OCLASS_CONSTRAINT; + + case ConversionRelationId: + Assert(object->objectSubId == 0); + return OCLASS_CONVERSION; + + case AttrDefaultRelationId: + Assert(object->objectSubId == 0); + return OCLASS_DEFAULT; + + case LanguageRelationId: + Assert(object->objectSubId == 0); + return OCLASS_LANGUAGE; + + case OperatorRelationId: + Assert(object->objectSubId == 0); + return OCLASS_OPERATOR; + + case OperatorClassRelationId: + Assert(object->objectSubId == 0); + return OCLASS_OPCLASS; + + case RewriteRelationId: + Assert(object->objectSubId == 0); + return OCLASS_REWRITE; + + case TriggerRelationId: + Assert(object->objectSubId == 0); + return OCLASS_TRIGGER; + + case NamespaceRelationId: + Assert(object->objectSubId == 0); + return OCLASS_SCHEMA; } + /* shouldn't get here */ elog(ERROR, "unrecognized object class: %u", object->classId); return OCLASS_CLASS; /* keep compiler quiet */ } @@ -1449,14 +1412,14 @@ getObjectDescription(const ObjectAddress *object) HeapTuple tup; Form_pg_cast castForm; - castDesc = heap_openr(CastRelationName, AccessShareLock); + castDesc = heap_open(CastRelationId, AccessShareLock); ScanKeyInit(&skey[0], ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(object->objectId)); - rcscan = systable_beginscan(castDesc, CastOidIndex, true, + rcscan = systable_beginscan(castDesc, CastOidIndexId, true, SnapshotNow, 1, skey); tup = systable_getnext(rcscan); @@ -1484,14 +1447,14 @@ getObjectDescription(const ObjectAddress *object) HeapTuple tup; Form_pg_constraint con; - conDesc = heap_openr(ConstraintRelationName, AccessShareLock); + conDesc = heap_open(ConstraintRelationId, AccessShareLock); ScanKeyInit(&skey[0], ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(object->objectId)); - rcscan = systable_beginscan(conDesc, ConstraintOidIndex, true, + rcscan = systable_beginscan(conDesc, ConstraintOidIndexId, true, SnapshotNow, 1, skey); tup = systable_getnext(rcscan); @@ -1544,14 +1507,14 @@ getObjectDescription(const ObjectAddress *object) Form_pg_attrdef attrdef; ObjectAddress colobject; - attrdefDesc = heap_openr(AttrDefaultRelationName, AccessShareLock); + attrdefDesc = heap_open(AttrDefaultRelationId, AccessShareLock); ScanKeyInit(&skey[0], ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(object->objectId)); - adscan = systable_beginscan(attrdefDesc, AttrDefaultOidIndex, + adscan = systable_beginscan(attrdefDesc, AttrDefaultOidIndexId, true, SnapshotNow, 1, skey); tup = systable_getnext(adscan); @@ -1643,14 +1606,14 @@ getObjectDescription(const ObjectAddress *object) HeapTuple tup; Form_pg_rewrite rule; - ruleDesc = heap_openr(RewriteRelationName, AccessShareLock); + ruleDesc = heap_open(RewriteRelationId, AccessShareLock); ScanKeyInit(&skey[0], ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(object->objectId)); - rcscan = systable_beginscan(ruleDesc, RewriteOidIndex, true, + rcscan = systable_beginscan(ruleDesc, RewriteOidIndexId, true, SnapshotNow, 1, skey); tup = systable_getnext(rcscan); @@ -1678,14 +1641,14 @@ getObjectDescription(const ObjectAddress *object) HeapTuple tup; Form_pg_trigger trig; - trigDesc = heap_openr(TriggerRelationName, AccessShareLock); + trigDesc = heap_open(TriggerRelationId, AccessShareLock); ScanKeyInit(&skey[0], ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(object->objectId)); - tgscan = systable_beginscan(trigDesc, TriggerOidIndex, true, + tgscan = systable_beginscan(trigDesc, TriggerOidIndexId, true, SnapshotNow, 1, skey); tup = systable_getnext(tgscan); diff --git a/src/backend/catalog/genbki.sh b/src/backend/catalog/genbki.sh index 42c54ce78a..3e120a83fe 100644 --- a/src/backend/catalog/genbki.sh +++ b/src/backend/catalog/genbki.sh @@ -6,7 +6,8 @@ # files. These .bki files are used to initialize the postgres template # database. # -# Copyright (c) 1994, Regents of the University of California +# Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group +# Portions Copyright (c) 1994, Regents of the University of California # # # IDENTIFICATION @@ -230,10 +231,10 @@ comment_level > 0 { next; } iname = substr(data, 1, pos-1); data = substr(data, pos+1, length(data)-pos); pos = index(data, ","); - ioid = substr(data, 1, pos-1); + oid = substr(data, 1, pos-1); data = substr(data, pos+1, length(data)-pos); - print "declare index " iname " " ioid " " data + print "declare index " iname " " oid " " data } /^DECLARE_UNIQUE_INDEX\(/ { @@ -250,10 +251,10 @@ comment_level > 0 { next; } iname = substr(data, 1, pos-1); data = substr(data, pos+1, length(data)-pos); pos = index(data, ","); - ioid = substr(data, 1, pos-1); + oid = substr(data, 1, pos-1); data = substr(data, pos+1, length(data)-pos); - print "declare unique index " iname " " ioid " " data + print "declare unique index " iname " " oid " " data } /^BUILD_INDICES/ { print "build indices"; } @@ -277,7 +278,7 @@ comment_level > 0 { next; } catalogandoid = substr($1,9,pos-9); pos = index(catalogandoid, ","); catalog = substr(catalogandoid, 1, pos-1); - catalogoid = substr(catalogandoid, pos+1, length(catalogandoid)-pos); + oid = substr(catalogandoid, pos+1, length(catalogandoid)-pos); if ($0 ~ /BKI_BOOTSTRAP/) { bootstrap = "bootstrap "; @@ -296,7 +297,7 @@ comment_level > 0 { next; } } # ---------------- -# process the contents of the catalog definition +# process the columns of the catalog definition # # attname[ x ] contains the attribute name for attribute x # atttype[ x ] contains the attribute type fot attribute x @@ -312,7 +313,7 @@ inside == 1 { # if this is the last line, then output the bki catalog stuff. # ---- if ($1 ~ /}/) { - print "create " bootstrap shared_relation without_oids catalog " " catalogoid; + print "create " bootstrap shared_relation without_oids catalog " " oid; print "\t("; for (j=1; j<i-1; j++) { @@ -335,7 +336,7 @@ inside == 1 { } # ---- -# if we are inside the catalog definition, then keep sucking up +# we are inside the catalog definition, so keep sucking up # attribute names and types # ---- if ($2 ~ /\[.*\]/) { # array attribute diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index e7cd79ef4c..af9f2331cd 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -32,7 +32,6 @@ #include "access/heapam.h" #include "access/genam.h" #include "catalog/catalog.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/heap.h" #include "catalog/index.h" @@ -40,6 +39,7 @@ #include "catalog/pg_attrdef.h" #include "catalog/pg_constraint.h" #include "catalog/pg_inherits.h" +#include "catalog/pg_namespace.h" #include "catalog/pg_statistic.h" #include "catalog/pg_type.h" #include "commands/tablecmds.h" @@ -452,7 +452,7 @@ AddNewAttributeTuples(Oid new_rel_oid, /* * open pg_attribute and its indexes. */ - rel = heap_openr(AttributeRelationName, RowExclusiveLock); + rel = heap_open(AttributeRelationId, RowExclusiveLock); indstate = CatalogOpenIndexes(rel); @@ -723,7 +723,7 @@ heap_create_with_catalog(const char *relname, * is creating the same relation name in parallel but hadn't committed * yet when we checked for a duplicate name above. */ - pg_class_desc = heap_openr(RelationRelationName, RowExclusiveLock); + pg_class_desc = heap_open(RelationRelationId, RowExclusiveLock); AddNewRelationTuple(pg_class_desc, new_rel_desc, @@ -764,7 +764,7 @@ heap_create_with_catalog(const char *relname, myself.classId = RelationRelationId; myself.objectId = new_rel_oid; myself.objectSubId = 0; - referenced.classId = get_system_catalog_relid(NamespaceRelationName); + referenced.classId = NamespaceRelationId; referenced.objectId = relnamespace; referenced.objectSubId = 0; recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL); @@ -814,14 +814,14 @@ RelationRemoveInheritance(Oid relid) ScanKeyData key; HeapTuple tuple; - catalogRelation = heap_openr(InheritsRelationName, RowExclusiveLock); + catalogRelation = heap_open(InheritsRelationId, RowExclusiveLock); ScanKeyInit(&key, Anum_pg_inherits_inhrelid, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(relid)); - scan = systable_beginscan(catalogRelation, InheritsRelidSeqnoIndex, true, + scan = systable_beginscan(catalogRelation, InheritsRelidSeqnoIndexId, true, SnapshotNow, 1, &key); while (HeapTupleIsValid(tuple = systable_getnext(scan))) @@ -846,7 +846,7 @@ DeleteRelationTuple(Oid relid) HeapTuple tup; /* Grab an appropriate lock on the pg_class relation */ - pg_class_desc = heap_openr(RelationRelationName, RowExclusiveLock); + pg_class_desc = heap_open(RelationRelationId, RowExclusiveLock); tup = SearchSysCache(RELOID, ObjectIdGetDatum(relid), @@ -879,7 +879,7 @@ DeleteAttributeTuples(Oid relid) HeapTuple atttup; /* Grab an appropriate lock on the pg_attribute relation */ - attrel = heap_openr(AttributeRelationName, RowExclusiveLock); + attrel = heap_open(AttributeRelationId, RowExclusiveLock); /* Use the index to scan only attributes of the target relation */ ScanKeyInit(&key[0], @@ -887,7 +887,7 @@ DeleteAttributeTuples(Oid relid) BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(relid)); - scan = systable_beginscan(attrel, AttributeRelidNumIndex, true, + scan = systable_beginscan(attrel, AttributeRelidNumIndexId, true, SnapshotNow, 1, key); /* Delete all the matching tuples */ @@ -925,7 +925,7 @@ RemoveAttributeById(Oid relid, AttrNumber attnum) */ rel = relation_open(relid, AccessExclusiveLock); - attr_rel = heap_openr(AttributeRelationName, RowExclusiveLock); + attr_rel = heap_open(AttributeRelationId, RowExclusiveLock); tuple = SearchSysCacheCopy(ATTNUM, ObjectIdGetDatum(relid), @@ -1010,7 +1010,7 @@ RemoveAttrDefault(Oid relid, AttrNumber attnum, HeapTuple tuple; bool found = false; - attrdef_rel = heap_openr(AttrDefaultRelationName, RowExclusiveLock); + attrdef_rel = heap_open(AttrDefaultRelationId, RowExclusiveLock); ScanKeyInit(&scankeys[0], Anum_pg_attrdef_adrelid, @@ -1021,7 +1021,7 @@ RemoveAttrDefault(Oid relid, AttrNumber attnum, BTEqualStrategyNumber, F_INT2EQ, Int16GetDatum(attnum)); - scan = systable_beginscan(attrdef_rel, AttrDefaultIndex, true, + scan = systable_beginscan(attrdef_rel, AttrDefaultIndexId, true, SnapshotNow, 2, scankeys); /* There should be at most one matching tuple, but we loop anyway */ @@ -1029,7 +1029,7 @@ RemoveAttrDefault(Oid relid, AttrNumber attnum, { ObjectAddress object; - object.classId = RelationGetRelid(attrdef_rel); + object.classId = AttrDefaultRelationId; object.objectId = HeapTupleGetOid(tuple); object.objectSubId = 0; @@ -1066,7 +1066,7 @@ RemoveAttrDefaultById(Oid attrdefId) AttrNumber myattnum; /* Grab an appropriate lock on the pg_attrdef relation */ - attrdef_rel = heap_openr(AttrDefaultRelationName, RowExclusiveLock); + attrdef_rel = heap_open(AttrDefaultRelationId, RowExclusiveLock); /* Find the pg_attrdef tuple */ ScanKeyInit(&scankeys[0], @@ -1074,7 +1074,7 @@ RemoveAttrDefaultById(Oid attrdefId) BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(attrdefId)); - scan = systable_beginscan(attrdef_rel, AttrDefaultOidIndex, true, + scan = systable_beginscan(attrdef_rel, AttrDefaultOidIndexId, true, SnapshotNow, 1, scankeys); tuple = systable_getnext(scan); @@ -1094,7 +1094,7 @@ RemoveAttrDefaultById(Oid attrdefId) heap_close(attrdef_rel, RowExclusiveLock); /* Fix the pg_attribute row */ - attr_rel = heap_openr(AttributeRelationName, RowExclusiveLock); + attr_rel = heap_open(AttributeRelationId, RowExclusiveLock); tuple = SearchSysCacheCopy(ATTNUM, ObjectIdGetDatum(myrelid), @@ -1236,14 +1236,14 @@ StoreAttrDefault(Relation rel, AttrNumber attnum, char *adbin) values[Anum_pg_attrdef_adsrc - 1] = DirectFunctionCall1(textin, CStringGetDatum(adsrc)); - adrel = heap_openr(AttrDefaultRelationName, RowExclusiveLock); + adrel = heap_open(AttrDefaultRelationId, RowExclusiveLock); tuple = heap_formtuple(adrel->rd_att, values, nulls); attrdefOid = simple_heap_insert(adrel, tuple); CatalogUpdateIndexes(adrel, tuple); - defobject.classId = RelationGetRelid(adrel); + defobject.classId = AttrDefaultRelationId; defobject.objectId = attrdefOid; defobject.objectSubId = 0; @@ -1259,7 +1259,7 @@ StoreAttrDefault(Relation rel, AttrNumber attnum, char *adbin) * Update the pg_attribute entry for the column to show that a default * exists. */ - attrrel = heap_openr(AttributeRelationName, RowExclusiveLock); + attrrel = heap_open(AttributeRelationId, RowExclusiveLock); atttup = SearchSysCacheCopy(ATTNUM, ObjectIdGetDatum(RelationGetRelid(rel)), Int16GetDatum(attnum), @@ -1666,7 +1666,7 @@ SetRelationNumChecks(Relation rel, int numchecks) HeapTuple reltup; Form_pg_class relStruct; - relrel = heap_openr(RelationRelationName, RowExclusiveLock); + relrel = heap_open(RelationRelationId, RowExclusiveLock); reltup = SearchSysCacheCopy(RELOID, ObjectIdGetDatum(RelationGetRelid(rel)), 0, 0, 0); @@ -1797,7 +1797,7 @@ RemoveRelConstraints(Relation rel, const char *constrName, HeapTuple contup; /* Grab an appropriate lock on the pg_constraint relation */ - conrel = heap_openr(ConstraintRelationName, RowExclusiveLock); + conrel = heap_open(ConstraintRelationId, RowExclusiveLock); /* Use the index to scan only constraints of the target relation */ ScanKeyInit(&key[0], @@ -1805,7 +1805,7 @@ RemoveRelConstraints(Relation rel, const char *constrName, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(RelationGetRelid(rel))); - conscan = systable_beginscan(conrel, ConstraintRelidIndex, true, + conscan = systable_beginscan(conrel, ConstraintRelidIndexId, true, SnapshotNow, 1, key); /* @@ -1819,7 +1819,7 @@ RemoveRelConstraints(Relation rel, const char *constrName, { ObjectAddress conobj; - conobj.classId = RelationGetRelid(conrel); + conobj.classId = ConstraintRelationId; conobj.objectId = HeapTupleGetOid(contup); conobj.objectSubId = 0; @@ -1852,7 +1852,7 @@ RemoveStatistics(Oid relid, AttrNumber attnum) int nkeys; HeapTuple tuple; - pgstatistic = heap_openr(StatisticRelationName, RowExclusiveLock); + pgstatistic = heap_open(StatisticRelationId, RowExclusiveLock); ScanKeyInit(&key[0], Anum_pg_statistic_starelid, @@ -1870,7 +1870,7 @@ RemoveStatistics(Oid relid, AttrNumber attnum) nkeys = 2; } - scan = systable_beginscan(pgstatistic, StatisticRelidAttnumIndex, true, + scan = systable_beginscan(pgstatistic, StatisticRelidAttnumIndexId, true, SnapshotNow, nkeys, key); while (HeapTupleIsValid(tuple = systable_getnext(scan))) @@ -2036,9 +2036,9 @@ heap_truncate_check_FKs(List *relations, bool tempTables) * Otherwise, must scan pg_constraint. Right now, it is a seqscan * because there is no available index on confrelid. */ - fkeyRel = heap_openr(ConstraintRelationName, AccessShareLock); + fkeyRel = heap_open(ConstraintRelationId, AccessShareLock); - fkeyScan = systable_beginscan(fkeyRel, NULL, false, + fkeyScan = systable_beginscan(fkeyRel, InvalidOid, false, SnapshotNow, 0, NULL); while (HeapTupleIsValid(tuple = systable_getnext(fkeyScan))) diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index f73fa335c0..cf2fcc2d5c 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -27,7 +27,6 @@ #include "access/heapam.h" #include "bootstrap/bootstrap.h" #include "catalog/catalog.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/heap.h" #include "catalog/index.h" @@ -245,7 +244,7 @@ UpdateRelationRelation(Relation indexRelation) Relation pg_class; HeapTuple tuple; - pg_class = heap_openr(RelationRelationName, RowExclusiveLock); + pg_class = heap_open(RelationRelationId, RowExclusiveLock); /* XXX Natts_pg_class_fixed is a hack - see pg_class.h */ tuple = heap_addheader(Natts_pg_class_fixed, @@ -301,7 +300,7 @@ AppendAttributeTuples(Relation indexRelation, int numatts) /* * open the attribute relation and its indexes */ - pg_attribute = heap_openr(AttributeRelationName, RowExclusiveLock); + pg_attribute = heap_open(AttributeRelationId, RowExclusiveLock); indstate = CatalogOpenIndexes(pg_attribute); @@ -400,7 +399,7 @@ UpdateIndexRelation(Oid indexoid, /* * open the system catalog index relation */ - pg_index = heap_openr(IndexRelationName, RowExclusiveLock); + pg_index = heap_open(IndexRelationId, RowExclusiveLock); /* * Build a pg_index tuple @@ -649,7 +648,7 @@ index_create(Oid heapRelationId, NULL, NULL); - referenced.classId = get_system_catalog_relid(ConstraintRelationName); + referenced.classId = ConstraintRelationId; referenced.objectId = conOid; referenced.objectSubId = 0; @@ -672,9 +671,9 @@ index_create(Oid heapRelationId, } /* Store dependency on operator classes */ - referenced.classId = get_system_catalog_relid(OperatorClassRelationName); for (i = 0; i < indexInfo->ii_NumIndexAttrs; i++) { + referenced.classId = OperatorClassRelationId; referenced.objectId = classObjectId[i]; referenced.objectSubId = 0; @@ -797,7 +796,7 @@ index_drop(Oid indexId) /* * fix INDEX relation, and check for expressional index */ - indexRelation = heap_openr(IndexRelationName, RowExclusiveLock); + indexRelation = heap_open(IndexRelationId, RowExclusiveLock); tuple = SearchSysCache(INDEXRELID, ObjectIdGetDatum(indexId), @@ -997,7 +996,7 @@ setRelhasindex(Oid relid, bool hasindex, bool isprimary, Oid reltoastidxid) * use heap_update, so cheat and overwrite the tuple in-place. In * normal processing, make a copy to scribble on. */ - pg_class = heap_openr(RelationRelationName, RowExclusiveLock); + pg_class = heap_open(RelationRelationId, RowExclusiveLock); if (!IsBootstrapProcessingMode()) { @@ -1110,7 +1109,7 @@ setNewRelfilenode(Relation relation) * Find the pg_class tuple for the given relation. This is not used * during bootstrap, so okay to use heap_update always. */ - pg_class = heap_openr(RelationRelationName, RowExclusiveLock); + pg_class = heap_open(RelationRelationId, RowExclusiveLock); tuple = SearchSysCacheCopy(RELOID, ObjectIdGetDatum(RelationGetRelid(relation)), @@ -1202,10 +1201,10 @@ UpdateStats(Oid relid, double reltuples) * case the stats updates will not be WAL-logged and so could be lost * in a crash. This seems OK considering VACUUM does the same thing. */ - pg_class = heap_openr(RelationRelationName, RowExclusiveLock); + pg_class = heap_open(RelationRelationId, RowExclusiveLock); in_place_upd = IsBootstrapProcessingMode() || - ReindexIsProcessingHeap(RelationGetRelid(pg_class)); + ReindexIsProcessingHeap(RelationRelationId); if (!in_place_upd) { diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c index 9b5fa50381..ecca6cf610 100644 --- a/src/backend/catalog/namespace.c +++ b/src/backend/catalog/namespace.c @@ -20,7 +20,6 @@ #include "postgres.h" #include "access/xact.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/namespace.h" #include "catalog/pg_conversion.h" @@ -1783,7 +1782,7 @@ RemoveTempRelations(Oid tempNamespaceId) * be a waste of cycles). We do this by finding everything that has a * dependency on the namespace. */ - object.classId = get_system_catalog_relid(NamespaceRelationName); + object.classId = NamespaceRelationId; object.objectId = tempNamespaceId; object.objectSubId = 0; diff --git a/src/backend/catalog/pg_aggregate.c b/src/backend/catalog/pg_aggregate.c index 9ec3101d48..f729bf5b79 100644 --- a/src/backend/catalog/pg_aggregate.c +++ b/src/backend/catalog/pg_aggregate.c @@ -15,12 +15,12 @@ #include "postgres.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/namespace.h" #include "catalog/pg_aggregate.h" #include "catalog/pg_language.h" +#include "catalog/pg_operator.h" #include "catalog/pg_proc.h" #include "miscadmin.h" #include "optimizer/cost.h" @@ -224,7 +224,7 @@ AggregateCreate(const char *aggName, else nulls[Anum_pg_aggregate_agginitval - 1] = 'n'; - aggdesc = heap_openr(AggregateRelationName, RowExclusiveLock); + aggdesc = heap_open(AggregateRelationId, RowExclusiveLock); tupDesc = aggdesc->rd_att; tup = heap_formtuple(tupDesc, values, nulls); @@ -262,7 +262,7 @@ AggregateCreate(const char *aggName, /* Depends on sort operator, if any */ if (OidIsValid(sortop)) { - referenced.classId = get_system_catalog_relid(OperatorRelationName); + referenced.classId = OperatorRelationId; referenced.objectId = sortop; referenced.objectSubId = 0; recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL); diff --git a/src/backend/catalog/pg_constraint.c b/src/backend/catalog/pg_constraint.c index efc9f49c23..0b61bd7e2d 100644 --- a/src/backend/catalog/pg_constraint.c +++ b/src/backend/catalog/pg_constraint.c @@ -17,11 +17,11 @@ #include "access/heapam.h" #include "access/genam.h" #include "catalog/catalog.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/pg_constraint.h" #include "catalog/pg_depend.h" +#include "catalog/pg_trigger.h" #include "catalog/pg_type.h" #include "commands/defrem.h" #include "miscadmin.h" @@ -72,7 +72,7 @@ CreateConstraintEntry(const char *constraintName, int i; ObjectAddress conobject; - conDesc = heap_openr(ConstraintRelationName, RowExclusiveLock); + conDesc = heap_open(ConstraintRelationId, RowExclusiveLock); Assert(constraintName); namestrcpy(&cname, constraintName); @@ -160,7 +160,7 @@ CreateConstraintEntry(const char *constraintName, /* update catalog indexes */ CatalogUpdateIndexes(conDesc, tup); - conobject.classId = RelationGetRelid(conDesc); + conobject.classId = ConstraintRelationId; conobject.objectId = conOid; conobject.objectSubId = 0; @@ -286,7 +286,7 @@ ConstraintNameIsUsed(ConstraintCategory conCat, Oid objId, ScanKeyData skey[2]; HeapTuple tup; - conDesc = heap_openr(ConstraintRelationName, AccessShareLock); + conDesc = heap_open(ConstraintRelationId, AccessShareLock); found = false; @@ -300,7 +300,7 @@ ConstraintNameIsUsed(ConstraintCategory conCat, Oid objId, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(objNamespace)); - conscan = systable_beginscan(conDesc, ConstraintNameNspIndex, true, + conscan = systable_beginscan(conDesc, ConstraintNameNspIndexId, true, SnapshotNow, 2, skey); while (HeapTupleIsValid(tup = systable_getnext(conscan))) @@ -362,7 +362,7 @@ ChooseConstraintName(const char *name1, const char *name2, bool found; ListCell *l; - conDesc = heap_openr(ConstraintRelationName, AccessShareLock); + conDesc = heap_open(ConstraintRelationId, AccessShareLock); /* try the unmodified label first */ StrNCpy(modlabel, label, sizeof(modlabel)); @@ -394,7 +394,7 @@ ChooseConstraintName(const char *name1, const char *name2, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(namespace)); - conscan = systable_beginscan(conDesc, ConstraintNameNspIndex, true, + conscan = systable_beginscan(conDesc, ConstraintNameNspIndexId, true, SnapshotNow, 2, skey); found = (HeapTupleIsValid(systable_getnext(conscan))); @@ -427,14 +427,14 @@ RemoveConstraintById(Oid conId) HeapTuple tup; Form_pg_constraint con; - conDesc = heap_openr(ConstraintRelationName, RowExclusiveLock); + conDesc = heap_open(ConstraintRelationId, RowExclusiveLock); ScanKeyInit(&skey[0], ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(conId)); - conscan = systable_beginscan(conDesc, ConstraintOidIndex, true, + conscan = systable_beginscan(conDesc, ConstraintOidIndexId, true, SnapshotNow, 1, skey); tup = systable_getnext(conscan); @@ -466,7 +466,7 @@ RemoveConstraintById(Oid conId) HeapTuple relTup; Form_pg_class classForm; - pgrel = heap_openr(RelationRelationName, RowExclusiveLock); + pgrel = heap_open(RelationRelationId, RowExclusiveLock); relTup = SearchSysCacheCopy(RELOID, ObjectIdGetDatum(con->conrelid), 0, 0, 0); @@ -524,42 +524,37 @@ GetConstraintNameForTrigger(Oid triggerId) { char *result; Oid constraintId = InvalidOid; - Oid pg_trigger_id; - Oid pg_constraint_id; Relation depRel; Relation conRel; ScanKeyData key[2]; SysScanDesc scan; HeapTuple tup; - pg_trigger_id = get_system_catalog_relid(TriggerRelationName); - pg_constraint_id = get_system_catalog_relid(ConstraintRelationName); - /* * We must grovel through pg_depend to find the owning constraint. * Perhaps pg_trigger should have a column for the owning constraint ... * but right now this is not performance-critical code. */ - depRel = heap_openr(DependRelationName, AccessShareLock); + depRel = heap_open(DependRelationId, AccessShareLock); ScanKeyInit(&key[0], Anum_pg_depend_classid, BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(pg_trigger_id)); + ObjectIdGetDatum(TriggerRelationId)); ScanKeyInit(&key[1], Anum_pg_depend_objid, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(triggerId)); /* assume we can ignore objsubid for a trigger */ - scan = systable_beginscan(depRel, DependDependerIndex, true, + scan = systable_beginscan(depRel, DependDependerIndexId, true, SnapshotNow, 2, key); while (HeapTupleIsValid(tup = systable_getnext(scan))) { Form_pg_depend foundDep = (Form_pg_depend) GETSTRUCT(tup); - if (foundDep->refclassid == pg_constraint_id && + if (foundDep->refclassid == ConstraintRelationId && foundDep->deptype == DEPENDENCY_INTERNAL) { constraintId = foundDep->refobjid; @@ -574,14 +569,14 @@ GetConstraintNameForTrigger(Oid triggerId) if (!OidIsValid(constraintId)) return NULL; /* no owning constraint found */ - conRel = heap_openr(ConstraintRelationName, AccessShareLock); + conRel = heap_open(ConstraintRelationId, AccessShareLock); ScanKeyInit(&key[0], ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(constraintId)); - scan = systable_beginscan(conRel, ConstraintOidIndex, true, + scan = systable_beginscan(conRel, ConstraintOidIndexId, true, SnapshotNow, 1, key); tup = systable_getnext(scan); diff --git a/src/backend/catalog/pg_conversion.c b/src/backend/catalog/pg_conversion.c index 2a449ff29c..8dd2852c03 100644 --- a/src/backend/catalog/pg_conversion.c +++ b/src/backend/catalog/pg_conversion.c @@ -15,7 +15,6 @@ #include "postgres.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/pg_conversion.h" @@ -82,7 +81,7 @@ ConversionCreate(const char *conname, Oid connamespace, } /* open pg_conversion */ - rel = heap_openr(ConversionRelationName, RowExclusiveLock); + rel = heap_open(ConversionRelationId, RowExclusiveLock); tupDesc = rel->rd_att; /* initialize nulls and values */ @@ -111,7 +110,7 @@ ConversionCreate(const char *conname, Oid connamespace, /* update the index if any */ CatalogUpdateIndexes(rel, tup); - myself.classId = RelationGetRelid(rel); + myself.classId = ConversionRelationId; myself.objectId = HeapTupleGetOid(tup); myself.objectSubId = 0; @@ -154,7 +153,7 @@ ConversionDrop(Oid conversionOid, DropBehavior behavior) /* * Do the deletion */ - object.classId = get_system_catalog_relid(ConversionRelationName); + object.classId = ConversionRelationId; object.objectId = conversionOid; object.objectSubId = 0; @@ -182,7 +181,7 @@ RemoveConversionById(Oid conversionOid) ObjectIdGetDatum(conversionOid)); /* open pg_conversion */ - rel = heap_openr(ConversionRelationName, RowExclusiveLock); + rel = heap_open(ConversionRelationId, RowExclusiveLock); tupDesc = rel->rd_att; scan = heap_beginscan(rel, SnapshotNow, diff --git a/src/backend/catalog/pg_depend.c b/src/backend/catalog/pg_depend.c index 3950619e05..6a5ad9830c 100644 --- a/src/backend/catalog/pg_depend.c +++ b/src/backend/catalog/pg_depend.c @@ -16,7 +16,6 @@ #include "access/genam.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/indexing.h" #include "catalog/dependency.h" #include "catalog/pg_depend.h" @@ -69,7 +68,7 @@ recordMultipleDependencies(const ObjectAddress *depender, if (IsBootstrapProcessingMode()) return; - dependDesc = heap_openr(DependRelationName, RowExclusiveLock); + dependDesc = heap_open(DependRelationId, RowExclusiveLock); /* Don't open indexes unless we need to make an update */ indstate = NULL; @@ -136,7 +135,7 @@ deleteDependencyRecordsFor(Oid classId, Oid objectId) SysScanDesc scan; HeapTuple tup; - depRel = heap_openr(DependRelationName, RowExclusiveLock); + depRel = heap_open(DependRelationId, RowExclusiveLock); ScanKeyInit(&key[0], Anum_pg_depend_classid, @@ -147,7 +146,7 @@ deleteDependencyRecordsFor(Oid classId, Oid objectId) BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(objectId)); - scan = systable_beginscan(depRel, DependDependerIndex, true, + scan = systable_beginscan(depRel, DependDependerIndexId, true, SnapshotNow, 2, key); while (HeapTupleIsValid(tup = systable_getnext(scan))) @@ -190,7 +189,7 @@ isObjectPinned(const ObjectAddress *object, Relation rel) BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(object->objectId)); - scan = systable_beginscan(rel, DependReferenceIndex, true, + scan = systable_beginscan(rel, DependReferenceIndexId, true, SnapshotNow, 2, key); /* diff --git a/src/backend/catalog/pg_largeobject.c b/src/backend/catalog/pg_largeobject.c index d27a932195..41272629d0 100644 --- a/src/backend/catalog/pg_largeobject.c +++ b/src/backend/catalog/pg_largeobject.c @@ -16,7 +16,6 @@ #include "access/genam.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/indexing.h" #include "catalog/pg_largeobject.h" #include "miscadmin.h" @@ -40,7 +39,7 @@ LargeObjectCreate(Oid loid) char nulls[Natts_pg_largeobject]; int i; - pg_largeobject = heap_openr(LargeObjectRelationName, RowExclusiveLock); + pg_largeobject = heap_open(LargeObjectRelationId, RowExclusiveLock); /* * Form new tuple @@ -86,9 +85,9 @@ LargeObjectDrop(Oid loid) BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(loid)); - pg_largeobject = heap_openr(LargeObjectRelationName, RowExclusiveLock); + pg_largeobject = heap_open(LargeObjectRelationId, RowExclusiveLock); - sd = systable_beginscan(pg_largeobject, LargeObjectLOidPNIndex, true, + sd = systable_beginscan(pg_largeobject, LargeObjectLOidPNIndexId, true, SnapshotNow, 1, skey); while ((tuple = systable_getnext(sd)) != NULL) @@ -123,9 +122,9 @@ LargeObjectExists(Oid loid) BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(loid)); - pg_largeobject = heap_openr(LargeObjectRelationName, AccessShareLock); + pg_largeobject = heap_open(LargeObjectRelationId, AccessShareLock); - sd = systable_beginscan(pg_largeobject, LargeObjectLOidPNIndex, true, + sd = systable_beginscan(pg_largeobject, LargeObjectLOidPNIndexId, true, SnapshotNow, 1, skey); if (systable_getnext(sd) != NULL) diff --git a/src/backend/catalog/pg_namespace.c b/src/backend/catalog/pg_namespace.c index f15e6164c6..3b36395906 100644 --- a/src/backend/catalog/pg_namespace.c +++ b/src/backend/catalog/pg_namespace.c @@ -15,7 +15,6 @@ #include "postgres.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/indexing.h" #include "catalog/pg_namespace.h" #include "utils/builtins.h" @@ -61,7 +60,7 @@ NamespaceCreate(const char *nspName, int32 ownerSysId) values[Anum_pg_namespace_nspowner - 1] = Int32GetDatum(ownerSysId); nulls[Anum_pg_namespace_nspacl - 1] = 'n'; - nspdesc = heap_openr(NamespaceRelationName, RowExclusiveLock); + nspdesc = heap_open(NamespaceRelationId, RowExclusiveLock); tupDesc = nspdesc->rd_att; tup = heap_formtuple(tupDesc, values, nulls); diff --git a/src/backend/catalog/pg_operator.c b/src/backend/catalog/pg_operator.c index 9fd3bc5e7b..a00573801d 100644 --- a/src/backend/catalog/pg_operator.c +++ b/src/backend/catalog/pg_operator.c @@ -18,10 +18,10 @@ #include "postgres.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/namespace.h" +#include "catalog/pg_namespace.h" #include "catalog/pg_operator.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" @@ -58,7 +58,7 @@ static Oid get_other_operator(List *otherOp, Oid leftTypeId, Oid rightTypeId, bool isCommutator); -static void makeOperatorDependencies(HeapTuple tuple, Oid pg_operator_relid); +static void makeOperatorDependencies(HeapTuple tuple); /* @@ -254,7 +254,7 @@ OperatorShellMake(const char *operatorName, /* * open pg_operator */ - pg_operator_desc = heap_openr(OperatorRelationName, RowExclusiveLock); + pg_operator_desc = heap_open(OperatorRelationId, RowExclusiveLock); tupDesc = pg_operator_desc->rd_att; /* @@ -270,7 +270,7 @@ OperatorShellMake(const char *operatorName, CatalogUpdateIndexes(pg_operator_desc, tup); /* Add dependencies for the entry */ - makeOperatorDependencies(tup, RelationGetRelid(pg_operator_desc)); + makeOperatorDependencies(tup); heap_freetuple(tup); @@ -620,7 +620,7 @@ OperatorCreate(const char *operatorName, values[i++] = ObjectIdGetDatum(restOid); /* oprrest */ values[i++] = ObjectIdGetDatum(joinOid); /* oprjoin */ - pg_operator_desc = heap_openr(OperatorRelationName, RowExclusiveLock); + pg_operator_desc = heap_open(OperatorRelationId, RowExclusiveLock); /* * If we are adding to an operator shell, update; else insert @@ -654,7 +654,7 @@ OperatorCreate(const char *operatorName, CatalogUpdateIndexes(pg_operator_desc, tup); /* Add dependencies for the entry */ - makeOperatorDependencies(tup, RelationGetRelid(pg_operator_desc)); + makeOperatorDependencies(tup); heap_close(pg_operator_desc, RowExclusiveLock); @@ -773,7 +773,7 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId) */ CommandCounterIncrement(); - pg_operator_desc = heap_openr(OperatorRelationName, RowExclusiveLock); + pg_operator_desc = heap_open(OperatorRelationId, RowExclusiveLock); tup = SearchSysCacheCopy(OPEROID, ObjectIdGetDatum(commId), @@ -877,13 +877,13 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId) * the given operator is a shell. */ static void -makeOperatorDependencies(HeapTuple tuple, Oid pg_operator_relid) +makeOperatorDependencies(HeapTuple tuple) { Form_pg_operator oper = (Form_pg_operator) GETSTRUCT(tuple); ObjectAddress myself, referenced; - myself.classId = pg_operator_relid; + myself.classId = OperatorRelationId; myself.objectId = HeapTupleGetOid(tuple); myself.objectSubId = 0; @@ -893,7 +893,7 @@ makeOperatorDependencies(HeapTuple tuple, Oid pg_operator_relid) /* Dependency on namespace */ if (OidIsValid(oper->oprnamespace)) { - referenced.classId = get_system_catalog_relid(NamespaceRelationName); + referenced.classId = NamespaceRelationId; referenced.objectId = oper->oprnamespace; referenced.objectSubId = 0; recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL); diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index dc054de436..d47543f607 100644 --- a/src/backend/catalog/pg_proc.c +++ b/src/backend/catalog/pg_proc.c @@ -15,9 +15,10 @@ #include "postgres.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/indexing.h" +#include "catalog/pg_language.h" +#include "catalog/pg_namespace.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" #include "executor/functions.h" @@ -226,7 +227,7 @@ ProcedureCreate(const char *procedureName, /* start out with empty permissions */ nulls[Anum_pg_proc_proacl - 1] = 'n'; - rel = heap_openr(ProcedureRelationName, RowExclusiveLock); + rel = heap_open(ProcedureRelationId, RowExclusiveLock); tupDesc = RelationGetDescr(rel); /* Check for pre-existing definition */ @@ -336,13 +337,13 @@ ProcedureCreate(const char *procedureName, myself.objectSubId = 0; /* dependency on namespace */ - referenced.classId = get_system_catalog_relid(NamespaceRelationName); + referenced.classId = NamespaceRelationId; referenced.objectId = procNamespace; referenced.objectSubId = 0; recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL); /* dependency on implementation language */ - referenced.classId = get_system_catalog_relid(LanguageRelationName); + referenced.classId = LanguageRelationId; referenced.objectId = languageObjectId; referenced.objectSubId = 0; recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL); diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c index be69d76b5c..9af631e2b4 100644 --- a/src/backend/catalog/pg_type.c +++ b/src/backend/catalog/pg_type.c @@ -15,9 +15,9 @@ #include "postgres.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/indexing.h" +#include "catalog/pg_namespace.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" #include "miscadmin.h" @@ -56,7 +56,7 @@ TypeShellMake(const char *typeName, Oid typeNamespace) /* * open pg_type */ - pg_type_desc = heap_openr(TypeRelationName, RowExclusiveLock); + pg_type_desc = heap_open(TypeRelationId, RowExclusiveLock); tupDesc = pg_type_desc->rd_att; /* @@ -274,7 +274,7 @@ TypeCreate(const char *typeName, * NOTE: updating will not work correctly in bootstrap mode; but we don't * expect to be overwriting any shell types in bootstrap mode. */ - pg_type_desc = heap_openr(TypeRelationName, RowExclusiveLock); + pg_type_desc = heap_open(TypeRelationId, RowExclusiveLock); tup = SearchSysCacheCopy(TYPENAMENSP, CStringGetDatum(typeName), @@ -389,7 +389,7 @@ GenerateTypeDependencies(Oid typeNamespace, /* skip for relation rowtype, since we have indirect dependency */ if (!OidIsValid(relationOid)) { - referenced.classId = get_system_catalog_relid(NamespaceRelationName); + referenced.classId = NamespaceRelationId; referenced.objectId = typeNamespace; referenced.objectSubId = 0; recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL); @@ -502,7 +502,7 @@ TypeRename(const char *oldTypeName, Oid typeNamespace, Relation pg_type_desc; HeapTuple tuple; - pg_type_desc = heap_openr(TypeRelationName, RowExclusiveLock); + pg_type_desc = heap_open(TypeRelationId, RowExclusiveLock); tuple = SearchSysCacheCopy(TYPENAMENSP, CStringGetDatum(oldTypeName), diff --git a/src/backend/commands/aggregatecmds.c b/src/backend/commands/aggregatecmds.c index 4bd571dd62..51fcf22dd4 100644 --- a/src/backend/commands/aggregatecmds.c +++ b/src/backend/commands/aggregatecmds.c @@ -23,7 +23,6 @@ #include "postgres.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/namespace.h" @@ -236,7 +235,7 @@ RenameAggregate(List *name, TypeName *basetype, const char *newname) else basetypeOid = ANYOID; - rel = heap_openr(ProcedureRelationName, RowExclusiveLock); + rel = heap_open(ProcedureRelationId, RowExclusiveLock); procOid = find_aggregate_func(name, basetypeOid, false); @@ -315,7 +314,7 @@ AlterAggregateOwner(List *name, TypeName *basetype, AclId newOwnerSysId) else basetypeOid = ANYOID; - rel = heap_openr(ProcedureRelationName, RowExclusiveLock); + rel = heap_open(ProcedureRelationId, RowExclusiveLock); procOid = find_aggregate_func(name, basetypeOid, false); diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 033f7d77f3..48c7c40eea 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -19,7 +19,6 @@ #include "access/heapam.h" #include "access/tuptoaster.h" #include "catalog/catalog.h" -#include "catalog/catname.h" #include "catalog/index.h" #include "catalog/indexing.h" #include "catalog/namespace.h" @@ -187,8 +186,7 @@ analyze_rel(Oid relid, VacuumStmt *vacstmt) /* * We can ANALYZE any table except pg_statistic. See update_attstats */ - if (IsSystemNamespace(RelationGetNamespace(onerel)) && - strcmp(RelationGetRelationName(onerel), StatisticRelationName) == 0) + if (RelationGetRelid(onerel) == StatisticRelationId) { relation_close(onerel, AccessShareLock); return; @@ -1091,7 +1089,7 @@ update_attstats(Oid relid, int natts, VacAttrStats **vacattrstats) if (natts <= 0) return; /* nothing to do */ - sd = heap_openr(StatisticRelationName, RowExclusiveLock); + sd = heap_open(StatisticRelationId, RowExclusiveLock); for (attno = 0; attno < natts; attno++) { diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c index 60d84750ba..30506b0e08 100644 --- a/src/backend/commands/async.c +++ b/src/backend/commands/async.c @@ -79,7 +79,6 @@ #include <netinet/in.h> #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/pg_listener.h" #include "commands/async.h" #include "libpq/libpq.h" @@ -205,7 +204,7 @@ Async_Listen(char *relname, int pid) if (Trace_notify) elog(DEBUG1, "Async_Listen(%s,%d)", relname, pid); - lRel = heap_openr(ListenerRelationName, ExclusiveLock); + lRel = heap_open(ListenerRelationId, ExclusiveLock); /* Detect whether we are already listening on this relname */ scan = heap_beginscan(lRel, SnapshotNow, 0, NULL); @@ -299,7 +298,7 @@ Async_Unlisten(char *relname, int pid) if (Trace_notify) elog(DEBUG1, "Async_Unlisten(%s,%d)", relname, pid); - lRel = heap_openr(ListenerRelationName, ExclusiveLock); + lRel = heap_open(ListenerRelationId, ExclusiveLock); scan = heap_beginscan(lRel, SnapshotNow, 0, NULL); while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL) @@ -357,7 +356,7 @@ Async_UnlistenAll(void) if (Trace_notify) elog(DEBUG1, "Async_UnlistenAll"); - lRel = heap_openr(ListenerRelationName, ExclusiveLock); + lRel = heap_open(ListenerRelationId, ExclusiveLock); tdesc = RelationGetDescr(lRel); /* Find and delete all entries with my listenerPID */ @@ -466,7 +465,7 @@ AtCommit_Notify(void) value[0] = value[1] = value[2] = (Datum) 0; value[Anum_pg_listener_notify - 1] = Int32GetDatum(MyProcPid); - lRel = heap_openr(ListenerRelationName, ExclusiveLock); + lRel = heap_open(ListenerRelationId, ExclusiveLock); tdesc = RelationGetDescr(lRel); scan = heap_beginscan(lRel, SnapshotNow, 0, NULL); @@ -902,7 +901,7 @@ ProcessIncomingNotify(void) StartTransactionCommand(); - lRel = heap_openr(ListenerRelationName, ExclusiveLock); + lRel = heap_open(ListenerRelationId, ExclusiveLock); tdesc = RelationGetDescr(lRel); /* Scan only entries with my listenerPID */ diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index dc450f1eaf..0858a3c567 100644 --- a/src/backend/commands/cluster.c +++ b/src/backend/commands/cluster.c @@ -20,7 +20,6 @@ #include "access/genam.h" #include "access/heapam.h" #include "catalog/catalog.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/heap.h" #include "catalog/index.h" @@ -434,7 +433,7 @@ mark_index_clustered(Relation rel, Oid indexOid) /* * Check each index of the relation and set/clear the bit as needed. */ - pg_index = heap_openr(IndexRelationName, RowExclusiveLock); + pg_index = heap_open(IndexRelationId, RowExclusiveLock); foreach(index, RelationGetIndexList(rel)) { @@ -719,7 +718,7 @@ swap_relation_files(Oid r1, Oid r2) CatalogIndexState indstate; /* We need writable copies of both pg_class tuples. */ - relRelation = heap_openr(RelationRelationName, RowExclusiveLock); + relRelation = heap_open(RelationRelationId, RowExclusiveLock); reltup1 = SearchSysCacheCopy(RELOID, ObjectIdGetDatum(r1), @@ -883,7 +882,7 @@ get_tables_to_cluster(MemoryContext cluster_context) * ever have indisclustered set, because CLUSTER will refuse to set it * when called with one of them as argument. */ - indRelation = relation_openr(IndexRelationName, AccessShareLock); + indRelation = heap_open(IndexRelationId, AccessShareLock); ScanKeyInit(&entry, Anum_pg_index_indisclustered, BTEqualStrategyNumber, F_BOOLEQ, diff --git a/src/backend/commands/comment.c b/src/backend/commands/comment.c index 57ab850a73..7ed359f46e 100644 --- a/src/backend/commands/comment.c +++ b/src/backend/commands/comment.c @@ -16,13 +16,17 @@ #include "access/genam.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/indexing.h" #include "catalog/namespace.h" +#include "catalog/pg_cast.h" #include "catalog/pg_constraint.h" +#include "catalog/pg_conversion.h" #include "catalog/pg_database.h" #include "catalog/pg_description.h" +#include "catalog/pg_language.h" #include "catalog/pg_largeobject.h" +#include "catalog/pg_namespace.h" +#include "catalog/pg_opclass.h" #include "catalog/pg_operator.h" #include "catalog/pg_proc.h" #include "catalog/pg_rewrite.h" @@ -192,9 +196,9 @@ CreateComments(Oid oid, Oid classoid, int32 subid, char *comment) BTEqualStrategyNumber, F_INT4EQ, Int32GetDatum(subid)); - description = heap_openr(DescriptionRelationName, RowExclusiveLock); + description = heap_open(DescriptionRelationId, RowExclusiveLock); - sd = systable_beginscan(description, DescriptionObjIndex, true, + sd = systable_beginscan(description, DescriptionObjIndexId, true, SnapshotNow, 3, skey); while ((oldtuple = systable_getnext(sd)) != NULL) @@ -274,9 +278,9 @@ DeleteComments(Oid oid, Oid classoid, int32 subid) else nkeys = 2; - description = heap_openr(DescriptionRelationName, RowExclusiveLock); + description = heap_open(DescriptionRelationId, RowExclusiveLock); - sd = systable_beginscan(description, DescriptionObjIndex, true, + sd = systable_beginscan(description, DescriptionObjIndexId, true, SnapshotNow, nkeys, skey); while ((oldtuple = systable_getnext(sd)) != NULL) @@ -353,8 +357,8 @@ CommentRelation(int objtype, List *relname, char *comment) } /* Create the comment using the relation's oid */ - - CreateComments(RelationGetRelid(relation), RelationRelationId, 0, comment); + CreateComments(RelationGetRelid(relation), RelationRelationId, + 0, comment); /* Done, but hold lock until commit */ relation_close(relation, NoLock); @@ -407,7 +411,6 @@ CommentAttribute(List *qualname, char *comment) attrname, RelationGetRelationName(relation)))); /* Create the comment using the relation's oid */ - CreateComments(RelationGetRelid(relation), RelationRelationId, (int32) attnum, comment); @@ -476,7 +479,7 @@ CommentDatabase(List *qualname, char *comment) aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_DATABASE, database); - /* Create the comment with the pg_database oid */ + /* Call CreateComments() to create/drop the comments */ CreateComments(oid, DatabaseRelationId, 0, comment); } @@ -493,7 +496,6 @@ static void CommentNamespace(List *qualname, char *comment) { Oid oid; - Oid classoid; char *namespace; if (list_length(qualname) != 1) @@ -515,11 +517,8 @@ CommentNamespace(List *qualname, char *comment) aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_NAMESPACE, namespace); - /* pg_namespace doesn't have a hard-coded OID, so must look it up */ - classoid = get_system_catalog_relid(NamespaceRelationName); - /* Call CreateComments() to create/drop the comments */ - CreateComments(oid, classoid, 0, comment); + CreateComments(oid, NamespaceRelationId, 0, comment); } /* @@ -547,7 +546,6 @@ CommentRule(List *qualname, char *comment) HeapTuple tuple; Oid reloid; Oid ruleoid; - Oid classoid; AclResult aclcheck; /* Separate relname and trig name */ @@ -567,7 +565,7 @@ CommentRule(List *qualname, char *comment) BTEqualStrategyNumber, F_NAMEEQ, PointerGetDatum(rulename)); - RewriteRelation = heap_openr(RewriteRelationName, AccessShareLock); + RewriteRelation = heap_open(RewriteRelationId, AccessShareLock); scanDesc = heap_beginscan(RewriteRelation, SnapshotNow, 1, &scanKeyData); @@ -631,11 +629,8 @@ CommentRule(List *qualname, char *comment) aclcheck_error(aclcheck, ACL_KIND_CLASS, get_rel_name(reloid)); - /* pg_rewrite doesn't have a hard-coded OID, so must look it up */ - classoid = get_system_catalog_relid(RewriteRelationName); - /* Call CreateComments() to create/drop the comments */ - CreateComments(ruleoid, classoid, 0, comment); + CreateComments(ruleoid, RewriteRelationId, 0, comment); heap_close(relation, NoLock); } @@ -671,7 +666,6 @@ CommentType(List *typename, char *comment) TypeNameToString(tname)); /* Call CreateComments() to create/drop the comments */ - CreateComments(oid, TypeRelationId, 0, comment); } @@ -707,7 +701,6 @@ CommentAggregate(List *aggregate, List *arguments, char *comment) NameListToString(aggregate)); /* Call CreateComments() to create/drop the comments */ - CreateComments(oid, ProcedureRelationId, 0, comment); } @@ -736,7 +729,6 @@ CommentProc(List *function, List *arguments, char *comment) NameListToString(function)); /* Call CreateComments() to create/drop the comments */ - CreateComments(oid, ProcedureRelationId, 0, comment); } @@ -756,7 +748,6 @@ CommentOperator(List *opername, List *arguments, char *comment) TypeName *typenode1 = (TypeName *) linitial(arguments); TypeName *typenode2 = (TypeName *) lsecond(arguments); Oid oid; - Oid classoid; /* Look up the operator */ oid = LookupOperNameTypeNames(opername, typenode1, typenode2, false); @@ -766,11 +757,8 @@ CommentOperator(List *opername, List *arguments, char *comment) aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_OPER, NameListToString(opername)); - /* pg_operator doesn't have a hard-coded OID, so must look it up */ - classoid = get_system_catalog_relid(OperatorRelationName); - /* Call CreateComments() to create/drop the comments */ - CreateComments(oid, classoid, 0, comment); + CreateComments(oid, OperatorRelationId, 0, comment); } /* @@ -817,7 +805,7 @@ CommentTrigger(List *qualname, char *comment) * Fetch the trigger tuple from pg_trigger. There can be only one * because of the unique index. */ - pg_trigger = heap_openr(TriggerRelationName, AccessShareLock); + pg_trigger = heap_open(TriggerRelationId, AccessShareLock); ScanKeyInit(&entry[0], Anum_pg_trigger_tgrelid, BTEqualStrategyNumber, F_OIDEQ, @@ -826,7 +814,7 @@ CommentTrigger(List *qualname, char *comment) Anum_pg_trigger_tgname, BTEqualStrategyNumber, F_NAMEEQ, CStringGetDatum(trigname)); - scan = systable_beginscan(pg_trigger, TriggerRelidNameIndex, true, + scan = systable_beginscan(pg_trigger, TriggerRelidNameIndexId, true, SnapshotNow, 2, entry); triggertuple = systable_getnext(scan); @@ -842,9 +830,8 @@ CommentTrigger(List *qualname, char *comment) systable_endscan(scan); - /* Create the comment with the pg_trigger oid */ - - CreateComments(oid, RelationGetRelid(pg_trigger), 0, comment); + /* Call CreateComments() to create/drop the comments */ + CreateComments(oid, TriggerRelationId, 0, comment); /* Done, but hold lock on relation */ @@ -896,14 +883,14 @@ CommentConstraint(List *qualname, char *comment) * than one match, because constraints are not required to have unique * names; if so, error out. */ - pg_constraint = heap_openr(ConstraintRelationName, AccessShareLock); + pg_constraint = heap_open(ConstraintRelationId, AccessShareLock); ScanKeyInit(&skey[0], Anum_pg_constraint_conrelid, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(RelationGetRelid(relation))); - scan = systable_beginscan(pg_constraint, ConstraintRelidIndex, true, + scan = systable_beginscan(pg_constraint, ConstraintRelidIndexId, true, SnapshotNow, 1, skey); while (HeapTupleIsValid(tuple = systable_getnext(scan))) @@ -930,8 +917,8 @@ CommentConstraint(List *qualname, char *comment) errmsg("constraint \"%s\" for table \"%s\" does not exist", conName, RelationGetRelationName(relation)))); - /* Create the comment with the pg_constraint oid */ - CreateComments(conOid, RelationGetRelid(pg_constraint), 0, comment); + /* Call CreateComments() to create/drop the comments */ + CreateComments(conOid, ConstraintRelationId, 0, comment); /* Done, but hold lock on relation */ heap_close(pg_constraint, AccessShareLock); @@ -951,7 +938,6 @@ static void CommentConversion(List *qualname, char *comment) { Oid conversionOid; - Oid classoid; conversionOid = FindConversionByName(qualname); if (!OidIsValid(conversionOid)) @@ -965,11 +951,8 @@ CommentConversion(List *qualname, char *comment) aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_CONVERSION, NameListToString(qualname)); - /* pg_conversion doesn't have a hard-coded OID, so must look it up */ - classoid = get_system_catalog_relid(ConversionRelationName); - /* Call CreateComments() to create/drop the comments */ - CreateComments(conversionOid, classoid, 0, comment); + CreateComments(conversionOid, ConversionRelationId, 0, comment); } /* @@ -985,7 +968,6 @@ static void CommentLanguage(List *qualname, char *comment) { Oid oid; - Oid classoid; char *language; if (list_length(qualname) != 1) @@ -1008,11 +990,8 @@ CommentLanguage(List *qualname, char *comment) (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), errmsg("must be superuser to comment on procedural language"))); - /* pg_language doesn't have a hard-coded OID, so must look it up */ - classoid = get_system_catalog_relid(LanguageRelationName); - /* Call CreateComments() to create/drop the comments */ - CreateComments(oid, classoid, 0, comment); + CreateComments(oid, LanguageRelationId, 0, comment); } /* @@ -1032,7 +1011,6 @@ CommentOpClass(List *qualname, List *arguments, char *comment) char *opcname; Oid amID; Oid opcID; - Oid classoid; HeapTuple tuple; Assert(list_length(arguments) == 1); @@ -1098,11 +1076,8 @@ CommentOpClass(List *qualname, List *arguments, char *comment) ReleaseSysCache(tuple); - /* pg_opclass doesn't have a hard-coded OID, so must look it up */ - classoid = get_system_catalog_relid(OperatorClassRelationName); - /* Call CreateComments() to create/drop the comments */ - CreateComments(opcID, classoid, 0, comment); + CreateComments(opcID, OperatorClassRelationId, 0, comment); } /* @@ -1118,7 +1093,6 @@ static void CommentLargeObject(List *qualname, char *comment) { Oid loid; - Oid classoid; Node *node; Assert(list_length(qualname) == 1); @@ -1152,11 +1126,8 @@ CommentLargeObject(List *qualname, char *comment) (errcode(ERRCODE_UNDEFINED_OBJECT), errmsg("large object %u does not exist", loid))); - /* pg_largeobject doesn't have a hard-coded OID, so must look it up */ - classoid = get_system_catalog_relid(LargeObjectRelationName); - /* Call CreateComments() to create/drop the comments */ - CreateComments(loid, classoid, 0, comment); + CreateComments(loid, LargeObjectRelationId, 0, comment); } /* @@ -1178,7 +1149,6 @@ CommentCast(List *qualname, List *arguments, char *comment) Oid targettypeid; HeapTuple tuple; Oid castOid; - Oid classoid; Assert(list_length(qualname) == 1); sourcetype = (TypeName *) linitial(qualname); @@ -1226,9 +1196,6 @@ CommentCast(List *qualname, List *arguments, char *comment) ReleaseSysCache(tuple); - /* pg_cast doesn't have a hard-coded OID, so must look it up */ - classoid = get_system_catalog_relid(CastRelationName); - /* Call CreateComments() to create/drop the comments */ - CreateComments(castOid, classoid, 0, comment); + CreateComments(castOid, CastRelationId, 0, comment); } diff --git a/src/backend/commands/conversioncmds.c b/src/backend/commands/conversioncmds.c index f5485e05fe..56a9053016 100644 --- a/src/backend/commands/conversioncmds.c +++ b/src/backend/commands/conversioncmds.c @@ -17,7 +17,6 @@ #include "catalog/pg_conversion.h" #include "access/heapam.h" #include "catalog/catalog.h" -#include "catalog/catname.h" #include "catalog/indexing.h" #include "catalog/namespace.h" #include "catalog/pg_type.h" @@ -124,7 +123,7 @@ RenameConversion(List *name, const char *newname) Relation rel; AclResult aclresult; - rel = heap_openr(ConversionRelationName, RowExclusiveLock); + rel = heap_open(ConversionRelationId, RowExclusiveLock); conversionOid = FindConversionByName(name); if (!OidIsValid(conversionOid)) @@ -183,7 +182,7 @@ AlterConversionOwner(List *name, AclId newOwnerSysId) Relation rel; Form_pg_conversion convForm; - rel = heap_openr(ConversionRelationName, RowExclusiveLock); + rel = heap_open(ConversionRelationId, RowExclusiveLock); conversionOid = FindConversionByName(name); if (!OidIsValid(conversionOid)) diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index c8a8f37e14..c1944fec26 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -22,7 +22,6 @@ #include "access/genam.h" #include "access/heapam.h" #include "access/printtup.h" -#include "catalog/catname.h" #include "catalog/index.h" #include "catalog/namespace.h" #include "catalog/pg_index.h" diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index 3679c021b1..489064d44b 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -27,7 +27,6 @@ #include "access/genam.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/catalog.h" #include "catalog/pg_database.h" #include "catalog/pg_shadow.h" @@ -364,7 +363,7 @@ createdb(const CreatedbStmt *stmt) * Iterate through all tablespaces of the template database, and copy * each one to the new database. */ - rel = heap_openr(TableSpaceRelationName, AccessShareLock); + rel = heap_open(TableSpaceRelationId, AccessShareLock); scan = heap_beginscan(rel, SnapshotNow, 0, NULL); while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL) { @@ -459,7 +458,7 @@ createdb(const CreatedbStmt *stmt) /* * Now OK to grab exclusive lock on pg_database. */ - pg_database_rel = heap_openr(DatabaseRelationName, ExclusiveLock); + pg_database_rel = heap_open(DatabaseRelationId, ExclusiveLock); /* Check to see if someone else created same DB name meanwhile. */ if (get_db_info(dbname, NULL, NULL, NULL, @@ -557,7 +556,7 @@ dropdb(const char *dbname) * since ReverifyMyDatabase takes RowShareLock. This allows ordinary * readers of pg_database to proceed in parallel. */ - pgdbrel = heap_openr(DatabaseRelationName, ExclusiveLock); + pgdbrel = heap_open(DatabaseRelationId, ExclusiveLock); if (!get_db_info(dbname, &db_id, &db_owner, NULL, &db_istemplate, NULL, NULL, NULL, NULL, NULL)) @@ -596,7 +595,7 @@ dropdb(const char *dbname) BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(db_id)); - pgdbscan = systable_beginscan(pgdbrel, DatabaseOidIndex, true, + pgdbscan = systable_beginscan(pgdbrel, DatabaseOidIndexId, true, SnapshotNow, 1, &key); tup = systable_getnext(pgdbscan); @@ -621,7 +620,7 @@ dropdb(const char *dbname) * NOTE: this is probably dead code since any such comments should have * been in that database, not mine. */ - DeleteComments(db_id, RelationGetRelid(pgdbrel), 0); + DeleteComments(db_id, DatabaseRelationId, 0); /* * Drop pages for this database that are in the shared buffer cache. @@ -676,13 +675,13 @@ RenameDatabase(const char *oldname, const char *newname) * Obtain ExclusiveLock so that no new session gets started * while the rename is in progress. */ - rel = heap_openr(DatabaseRelationName, ExclusiveLock); + rel = heap_open(DatabaseRelationId, ExclusiveLock); ScanKeyInit(&key, Anum_pg_database_datname, BTEqualStrategyNumber, F_NAMEEQ, NameGetDatum(oldname)); - scan = systable_beginscan(rel, DatabaseNameIndex, true, + scan = systable_beginscan(rel, DatabaseNameIndexId, true, SnapshotNow, 1, &key); tup = systable_getnext(scan); @@ -717,7 +716,7 @@ RenameDatabase(const char *oldname, const char *newname) Anum_pg_database_datname, BTEqualStrategyNumber, F_NAMEEQ, NameGetDatum(newname)); - scan2 = systable_beginscan(rel, DatabaseNameIndex, true, + scan2 = systable_beginscan(rel, DatabaseNameIndexId, true, SnapshotNow, 1, &key2); if (HeapTupleIsValid(systable_getnext(scan2))) ereport(ERROR, @@ -776,12 +775,12 @@ AlterDatabaseSet(AlterDatabaseSetStmt *stmt) * We don't need ExclusiveLock since we aren't updating the * flat file. */ - rel = heap_openr(DatabaseRelationName, RowExclusiveLock); + rel = heap_open(DatabaseRelationId, RowExclusiveLock); ScanKeyInit(&scankey, Anum_pg_database_datname, BTEqualStrategyNumber, F_NAMEEQ, NameGetDatum(stmt->dbname)); - scan = systable_beginscan(rel, DatabaseNameIndex, true, + scan = systable_beginscan(rel, DatabaseNameIndexId, true, SnapshotNow, 1, &scankey); tuple = systable_getnext(scan); if (!HeapTupleIsValid(tuple)) @@ -861,12 +860,12 @@ AlterDatabaseOwner(const char *dbname, AclId newOwnerSysId) * We don't need ExclusiveLock since we aren't updating the * flat file. */ - rel = heap_openr(DatabaseRelationName, RowExclusiveLock); + rel = heap_open(DatabaseRelationId, RowExclusiveLock); ScanKeyInit(&scankey, Anum_pg_database_datname, BTEqualStrategyNumber, F_NAMEEQ, NameGetDatum(dbname)); - scan = systable_beginscan(rel, DatabaseNameIndex, true, + scan = systable_beginscan(rel, DatabaseNameIndexId, true, SnapshotNow, 1, &scankey); tuple = systable_getnext(scan); if (!HeapTupleIsValid(tuple)) @@ -958,14 +957,14 @@ get_db_info(const char *name, Oid *dbIdP, int4 *ownerIdP, AssertArg(name); /* Caller may wish to grab a better lock on pg_database beforehand... */ - relation = heap_openr(DatabaseRelationName, AccessShareLock); + relation = heap_open(DatabaseRelationId, AccessShareLock); ScanKeyInit(&scanKey, Anum_pg_database_datname, BTEqualStrategyNumber, F_NAMEEQ, NameGetDatum(name)); - scan = systable_beginscan(relation, DatabaseNameIndex, true, + scan = systable_beginscan(relation, DatabaseNameIndexId, true, SnapshotNow, 1, &scanKey); tuple = systable_getnext(scan); @@ -1041,7 +1040,7 @@ remove_dbtablespaces(Oid db_id) HeapScanDesc scan; HeapTuple tuple; - rel = heap_openr(TableSpaceRelationName, AccessShareLock); + rel = heap_open(TableSpaceRelationId, AccessShareLock); scan = heap_beginscan(rel, SnapshotNow, 0, NULL); while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL) { @@ -1108,12 +1107,12 @@ get_database_oid(const char *dbname) Oid oid; /* There's no syscache for pg_database, so must look the hard way */ - pg_database = heap_openr(DatabaseRelationName, AccessShareLock); + pg_database = heap_open(DatabaseRelationId, AccessShareLock); ScanKeyInit(&entry[0], Anum_pg_database_datname, BTEqualStrategyNumber, F_NAMEEQ, CStringGetDatum(dbname)); - scan = systable_beginscan(pg_database, DatabaseNameIndex, true, + scan = systable_beginscan(pg_database, DatabaseNameIndexId, true, SnapshotNow, 1, entry); dbtuple = systable_getnext(scan); @@ -1148,12 +1147,12 @@ get_database_name(Oid dbid) char *result; /* There's no syscache for pg_database, so must look the hard way */ - pg_database = heap_openr(DatabaseRelationName, AccessShareLock); + pg_database = heap_open(DatabaseRelationId, AccessShareLock); ScanKeyInit(&entry[0], ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(dbid)); - scan = systable_beginscan(pg_database, DatabaseOidIndex, true, + scan = systable_beginscan(pg_database, DatabaseOidIndexId, true, SnapshotNow, 1, entry); dbtuple = systable_getnext(scan); diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index c0dc534dfb..5e18a59b30 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -34,10 +34,10 @@ #include "access/genam.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/namespace.h" +#include "catalog/pg_aggregate.h" #include "catalog/pg_cast.h" #include "catalog/pg_language.h" #include "catalog/pg_proc.h" @@ -742,7 +742,7 @@ RemoveFunctionById(Oid funcOid) /* * Delete the pg_proc tuple. */ - relation = heap_openr(ProcedureRelationName, RowExclusiveLock); + relation = heap_open(ProcedureRelationId, RowExclusiveLock); tup = SearchSysCache(PROCOID, ObjectIdGetDatum(funcOid), @@ -763,7 +763,7 @@ RemoveFunctionById(Oid funcOid) */ if (isagg) { - relation = heap_openr(AggregateRelationName, RowExclusiveLock); + relation = heap_open(AggregateRelationId, RowExclusiveLock); tup = SearchSysCache(AGGFNOID, ObjectIdGetDatum(funcOid), @@ -793,7 +793,7 @@ RenameFunction(List *name, List *argtypes, const char *newname) Relation rel; AclResult aclresult; - rel = heap_openr(ProcedureRelationName, RowExclusiveLock); + rel = heap_open(ProcedureRelationId, RowExclusiveLock); procOid = LookupFuncNameTypeNames(name, argtypes, false); @@ -860,7 +860,7 @@ AlterFunctionOwner(List *name, List *argtypes, AclId newOwnerSysId) Form_pg_proc procForm; Relation rel; - rel = heap_openr(ProcedureRelationName, RowExclusiveLock); + rel = heap_open(ProcedureRelationId, RowExclusiveLock); procOid = LookupFuncNameTypeNames(name, argtypes, false); @@ -948,7 +948,7 @@ AlterFunction(AlterFunctionStmt *stmt) DefElem *strict_item = NULL; DefElem *security_def_item = NULL; - rel = heap_openr(ProcedureRelationName, RowExclusiveLock); + rel = heap_open(ProcedureRelationId, RowExclusiveLock); funcOid = LookupFuncNameTypeNames(stmt->func->funcname, stmt->func->funcargs, @@ -1014,7 +1014,7 @@ SetFunctionReturnType(Oid funcOid, Oid newRetType) HeapTuple tup; Form_pg_proc procForm; - pg_proc_rel = heap_openr(ProcedureRelationName, RowExclusiveLock); + pg_proc_rel = heap_open(ProcedureRelationId, RowExclusiveLock); tup = SearchSysCacheCopy(PROCOID, ObjectIdGetDatum(funcOid), @@ -1050,7 +1050,7 @@ SetFunctionArgType(Oid funcOid, int argIndex, Oid newArgType) HeapTuple tup; Form_pg_proc procForm; - pg_proc_rel = heap_openr(ProcedureRelationName, RowExclusiveLock); + pg_proc_rel = heap_open(ProcedureRelationId, RowExclusiveLock); tup = SearchSysCacheCopy(PROCOID, ObjectIdGetDatum(funcOid), @@ -1266,7 +1266,7 @@ CreateCast(CreateCastStmt *stmt) break; } - relation = heap_openr(CastRelationName, RowExclusiveLock); + relation = heap_open(CastRelationId, RowExclusiveLock); /* * Check for duplicate. This is just to give a friendly error @@ -1299,7 +1299,7 @@ CreateCast(CreateCastStmt *stmt) CatalogUpdateIndexes(relation, tuple); /* make dependency entries */ - myself.classId = RelationGetRelid(relation); + myself.classId = CastRelationId; myself.objectId = HeapTupleGetOid(tuple); myself.objectSubId = 0; @@ -1379,7 +1379,7 @@ DropCast(DropCastStmt *stmt) /* * Do the deletion */ - object.classId = get_system_catalog_relid(CastRelationName); + object.classId = CastRelationId; object.objectId = HeapTupleGetOid(tuple); object.objectSubId = 0; @@ -1397,13 +1397,13 @@ DropCastById(Oid castOid) SysScanDesc scan; HeapTuple tuple; - relation = heap_openr(CastRelationName, RowExclusiveLock); + relation = heap_open(CastRelationId, RowExclusiveLock); ScanKeyInit(&scankey, ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(castOid)); - scan = systable_beginscan(relation, CastOidIndex, true, + scan = systable_beginscan(relation, CastOidIndexId, true, SnapshotNow, 1, &scankey); tuple = systable_getnext(scan); diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 4719dba655..6b015bfcd0 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -17,7 +17,6 @@ #include "access/heapam.h" #include "catalog/catalog.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/heap.h" #include "catalog/index.h" @@ -1039,7 +1038,7 @@ ReindexDatabase(const char *dbname, bool force /* currently unused */ , * We only consider plain relations here (toast rels will be processed * indirectly by reindex_relation). */ - relationRelation = heap_openr(RelationRelationName, AccessShareLock); + relationRelation = heap_open(RelationRelationId, AccessShareLock); scan = heap_beginscan(relationRelation, SnapshotNow, 0, NULL); while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL) { diff --git a/src/backend/commands/opclasscmds.c b/src/backend/commands/opclasscmds.c index 129999608d..8714f52908 100644 --- a/src/backend/commands/opclasscmds.c +++ b/src/backend/commands/opclasscmds.c @@ -17,13 +17,13 @@ #include "access/genam.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/namespace.h" #include "catalog/pg_am.h" #include "catalog/pg_amop.h" #include "catalog/pg_amproc.h" +#include "catalog/pg_namespace.h" #include "catalog/pg_opclass.h" #include "catalog/pg_operator.h" #include "catalog/pg_proc.h" @@ -255,7 +255,7 @@ DefineOpClass(CreateOpClassStmt *stmt) } } - rel = heap_openr(OperatorClassRelationName, RowExclusiveLock); + rel = heap_open(OperatorClassRelationId, RowExclusiveLock); /* * Make sure there is no existing opclass of this name (this is just @@ -287,7 +287,7 @@ DefineOpClass(CreateOpClassStmt *stmt) BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(amoid)); - scan = systable_beginscan(rel, OpclassAmNameNspIndex, true, + scan = systable_beginscan(rel, OpclassAmNameNspIndexId, true, SnapshotNow, 1, skey); while (HeapTupleIsValid(tup = systable_getnext(scan))) @@ -345,12 +345,12 @@ DefineOpClass(CreateOpClassStmt *stmt) * Create dependencies. Note: we do not create a dependency link to * the AM, because we don't currently support DROP ACCESS METHOD. */ - myself.classId = RelationGetRelid(rel); + myself.classId = OperatorClassRelationId; myself.objectId = opclassoid; myself.objectSubId = 0; /* dependency on namespace */ - referenced.classId = get_system_catalog_relid(NamespaceRelationName); + referenced.classId = NamespaceRelationId; referenced.objectId = namespaceoid; referenced.objectSubId = 0; recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL); @@ -371,11 +371,11 @@ DefineOpClass(CreateOpClassStmt *stmt) } /* dependencies on operators */ - referenced.classId = get_system_catalog_relid(OperatorRelationName); foreach(l, operators) { OpClassMember *op = (OpClassMember *) lfirst(l); + referenced.classId = OperatorRelationId; referenced.objectId = op->object; referenced.objectSubId = 0; recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL); @@ -547,7 +547,7 @@ storeOperators(Oid opclassoid, List *operators) ListCell *l; int i; - rel = heap_openr(AccessMethodOperatorRelationName, RowExclusiveLock); + rel = heap_open(AccessMethodOperatorRelationId, RowExclusiveLock); foreach(l, operators) { @@ -591,7 +591,7 @@ storeProcedures(Oid opclassoid, List *procedures) ListCell *l; int i; - rel = heap_openr(AccessMethodProcedureRelationName, RowExclusiveLock); + rel = heap_open(AccessMethodProcedureRelationId, RowExclusiveLock); foreach(l, procedures) { @@ -701,7 +701,7 @@ RemoveOpClass(RemoveOpClassStmt *stmt) /* * Do the deletion */ - object.classId = get_system_catalog_relid(OperatorClassRelationName); + object.classId = OperatorClassRelationId; object.objectId = opcID; object.objectSubId = 0; @@ -722,7 +722,7 @@ RemoveOpClassById(Oid opclassOid) /* * First remove the pg_opclass entry itself. */ - rel = heap_openr(OperatorClassRelationName, RowExclusiveLock); + rel = heap_open(OperatorClassRelationId, RowExclusiveLock); tup = SearchSysCache(CLAOID, ObjectIdGetDatum(opclassOid), @@ -744,9 +744,9 @@ RemoveOpClassById(Oid opclassOid) BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(opclassOid)); - rel = heap_openr(AccessMethodOperatorRelationName, RowExclusiveLock); + rel = heap_open(AccessMethodOperatorRelationId, RowExclusiveLock); - scan = systable_beginscan(rel, AccessMethodStrategyIndex, true, + scan = systable_beginscan(rel, AccessMethodStrategyIndexId, true, SnapshotNow, 1, skey); while (HeapTupleIsValid(tup = systable_getnext(scan))) @@ -763,9 +763,9 @@ RemoveOpClassById(Oid opclassOid) BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(opclassOid)); - rel = heap_openr(AccessMethodProcedureRelationName, RowExclusiveLock); + rel = heap_open(AccessMethodProcedureRelationId, RowExclusiveLock); - scan = systable_beginscan(rel, AccessMethodProcedureIndex, true, + scan = systable_beginscan(rel, AccessMethodProcedureIndexId, true, SnapshotNow, 1, skey); while (HeapTupleIsValid(tup = systable_getnext(scan))) @@ -800,7 +800,7 @@ RenameOpClass(List *name, const char *access_method, const char *newname) errmsg("access method \"%s\" does not exist", access_method))); - rel = heap_openr(OperatorClassRelationName, RowExclusiveLock); + rel = heap_open(OperatorClassRelationId, RowExclusiveLock); /* * Look up the opclass @@ -900,7 +900,7 @@ AlterOpClassOwner(List *name, const char *access_method, AclId newOwnerSysId) errmsg("access method \"%s\" does not exist", access_method))); - rel = heap_openr(OperatorClassRelationName, RowExclusiveLock); + rel = heap_open(OperatorClassRelationId, RowExclusiveLock); /* * Look up the opclass diff --git a/src/backend/commands/operatorcmds.c b/src/backend/commands/operatorcmds.c index 1749eb3df0..5dd794ed9e 100644 --- a/src/backend/commands/operatorcmds.c +++ b/src/backend/commands/operatorcmds.c @@ -35,7 +35,6 @@ #include "postgres.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/namespace.h" @@ -234,7 +233,7 @@ RemoveOperator(RemoveOperStmt *stmt) /* * Do the deletion */ - object.classId = get_system_catalog_relid(OperatorRelationName); + object.classId = OperatorRelationId; object.objectId = operOid; object.objectSubId = 0; @@ -250,7 +249,7 @@ RemoveOperatorById(Oid operOid) Relation relation; HeapTuple tup; - relation = heap_openr(OperatorRelationName, RowExclusiveLock); + relation = heap_open(OperatorRelationId, RowExclusiveLock); tup = SearchSysCache(OPEROID, ObjectIdGetDatum(operOid), @@ -277,7 +276,7 @@ AlterOperatorOwner(List *name, TypeName *typeName1, TypeName *typeName2, Relation rel; Form_pg_operator oprForm; - rel = heap_openr(OperatorRelationName, RowExclusiveLock); + rel = heap_open(OperatorRelationId, RowExclusiveLock); operOid = LookupOperNameTypeNames(name, typeName1, typeName2, false); diff --git a/src/backend/commands/proclang.c b/src/backend/commands/proclang.c index d91404ece4..fa807217df 100644 --- a/src/backend/commands/proclang.c +++ b/src/backend/commands/proclang.c @@ -16,7 +16,6 @@ #include <ctype.h> #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/namespace.h" @@ -132,7 +131,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt) values[i++] = ObjectIdGetDatum(valProcOid); /* lanvalidator */ nulls[i] = 'n'; /* lanacl */ - rel = heap_openr(LanguageRelationName, RowExclusiveLock); + rel = heap_open(LanguageRelationId, RowExclusiveLock); tupDesc = rel->rd_att; tup = heap_formtuple(tupDesc, values, nulls); @@ -144,7 +143,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt) /* * Create dependencies for language */ - myself.classId = RelationGetRelid(rel); + myself.classId = LanguageRelationId; myself.objectId = HeapTupleGetOid(tup); myself.objectSubId = 0; @@ -200,7 +199,7 @@ DropProceduralLanguage(DropPLangStmt *stmt) (errcode(ERRCODE_UNDEFINED_OBJECT), errmsg("language \"%s\" does not exist", languageName))); - object.classId = get_system_catalog_relid(LanguageRelationName); + object.classId = LanguageRelationId; object.objectId = HeapTupleGetOid(langTup); object.objectSubId = 0; @@ -221,7 +220,7 @@ DropProceduralLanguageById(Oid langOid) Relation rel; HeapTuple langTup; - rel = heap_openr(LanguageRelationName, RowExclusiveLock); + rel = heap_open(LanguageRelationId, RowExclusiveLock); langTup = SearchSysCache(LANGOID, ObjectIdGetDatum(langOid), @@ -245,7 +244,7 @@ RenameLanguage(const char *oldname, const char *newname) HeapTuple tup; Relation rel; - rel = heap_openr(LanguageRelationName, RowExclusiveLock); + rel = heap_open(LanguageRelationId, RowExclusiveLock); tup = SearchSysCacheCopy(LANGNAME, CStringGetDatum(oldname), diff --git a/src/backend/commands/schemacmds.c b/src/backend/commands/schemacmds.c index 755f198a5e..83540c1bfb 100644 --- a/src/backend/commands/schemacmds.c +++ b/src/backend/commands/schemacmds.c @@ -16,7 +16,6 @@ #include "access/heapam.h" #include "catalog/catalog.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/namespace.h" @@ -189,7 +188,7 @@ RemoveSchema(List *names, DropBehavior behavior) * Do the deletion. Objects contained in the schema are removed by * means of their dependency links to the schema. */ - object.classId = get_system_catalog_relid(NamespaceRelationName); + object.classId = NamespaceRelationId; object.objectId = namespaceId; object.objectSubId = 0; @@ -206,7 +205,7 @@ RemoveSchemaById(Oid schemaOid) Relation relation; HeapTuple tup; - relation = heap_openr(NamespaceRelationName, RowExclusiveLock); + relation = heap_open(NamespaceRelationId, RowExclusiveLock); tup = SearchSysCache(NAMESPACEOID, ObjectIdGetDatum(schemaOid), @@ -232,7 +231,7 @@ RenameSchema(const char *oldname, const char *newname) Relation rel; AclResult aclresult; - rel = heap_openr(NamespaceRelationName, RowExclusiveLock); + rel = heap_open(NamespaceRelationId, RowExclusiveLock); tup = SearchSysCacheCopy(NAMESPACENAME, CStringGetDatum(oldname), @@ -287,7 +286,7 @@ AlterSchemaOwner(const char *name, AclId newOwnerSysId) Relation rel; Form_pg_namespace nspForm; - rel = heap_openr(NamespaceRelationName, RowExclusiveLock); + rel = heap_open(NamespaceRelationId, RowExclusiveLock); tup = SearchSysCache(NAMESPACENAME, CStringGetDatum(name), diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 5c6eb59e6b..620861fffb 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -17,7 +17,6 @@ #include "access/genam.h" #include "access/tuptoaster.h" #include "catalog/catalog.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/heap.h" #include "catalog/index.h" @@ -1133,7 +1132,7 @@ StoreCatalogInheritance(Oid relationId, List *supers) * and then entered into pg_ipl. Since that catalog doesn't exist * anymore, there's no need to look for indirect ancestors.) */ - relation = heap_openr(InheritsRelationName, RowExclusiveLock); + relation = heap_open(InheritsRelationId, RowExclusiveLock); desc = RelationGetDescr(relation); seqNumber = 1; @@ -1224,7 +1223,7 @@ setRelhassubclassInRelation(Oid relationId, bool relhassubclass) * If the tuple already has the right relhassubclass setting, we don't * need to update it, but we still need to issue an SI inval message. */ - relationRelation = heap_openr(RelationRelationName, RowExclusiveLock); + relationRelation = heap_open(RelationRelationId, RowExclusiveLock); tuple = SearchSysCacheCopy(RELOID, ObjectIdGetDatum(relationId), 0, 0, 0); @@ -1347,7 +1346,7 @@ renameatt(Oid myrelid, oldattname))); } - attrelation = heap_openr(AttributeRelationName, RowExclusiveLock); + attrelation = heap_open(AttributeRelationId, RowExclusiveLock); atttup = SearchSysCacheCopyAttName(myrelid, oldattname); if (!HeapTupleIsValid(atttup)) @@ -1514,7 +1513,7 @@ renamerel(Oid myrelid, const char *newrelname) * Find relation's pg_class tuple, and make sure newrelname isn't in * use. */ - relrelation = heap_openr(RelationRelationName, RowExclusiveLock); + relrelation = heap_open(RelationRelationId, RowExclusiveLock); reltup = SearchSysCacheCopy(RELOID, PointerGetDatum(myrelid), @@ -1626,14 +1625,14 @@ update_ri_trigger_args(Oid relid, char nulls[Natts_pg_trigger]; char replaces[Natts_pg_trigger]; - tgrel = heap_openr(TriggerRelationName, RowExclusiveLock); + tgrel = heap_open(TriggerRelationId, RowExclusiveLock); if (fk_scan) { ScanKeyInit(&skey[0], Anum_pg_trigger_tgconstrrelid, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(relid)); - trigscan = systable_beginscan(tgrel, TriggerConstrRelidIndex, + trigscan = systable_beginscan(tgrel, TriggerConstrRelidIndexId, true, SnapshotNow, 1, skey); } @@ -1643,7 +1642,7 @@ update_ri_trigger_args(Oid relid, Anum_pg_trigger_tgrelid, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(relid)); - trigscan = systable_beginscan(tgrel, TriggerRelidNameIndex, + trigscan = systable_beginscan(tgrel, TriggerRelidNameIndexId, true, SnapshotNow, 1, skey); } @@ -2772,7 +2771,7 @@ find_composite_type_dependencies(Oid typeOid, const char *origTblName) * We scan pg_depend to find those things that depend on the rowtype. * (We assume we can ignore refobjsubid for a rowtype.) */ - depRel = relation_openr(DependRelationName, AccessShareLock); + depRel = heap_open(DependRelationId, AccessShareLock); ScanKeyInit(&key[0], Anum_pg_depend_refclassid, @@ -2783,7 +2782,7 @@ find_composite_type_dependencies(Oid typeOid, const char *origTblName) BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(typeOid)); - depScan = systable_beginscan(depRel, DependReferenceIndex, true, + depScan = systable_beginscan(depRel, DependReferenceIndexId, true, SnapshotNow, 2, key); while (HeapTupleIsValid(depTup = systable_getnext(depScan))) @@ -2894,7 +2893,7 @@ ATExecAddColumn(AlteredTableInfo *tab, Relation rel, Form_pg_type tform; Expr *defval; - attrdesc = heap_openr(AttributeRelationName, RowExclusiveLock); + attrdesc = heap_open(AttributeRelationId, RowExclusiveLock); /* * Are we adding the column to a recursion child? If so, check @@ -2935,7 +2934,7 @@ ATExecAddColumn(AlteredTableInfo *tab, Relation rel, } } - pgclass = heap_openr(RelationRelationName, RowExclusiveLock); + pgclass = heap_open(RelationRelationId, RowExclusiveLock); reltup = SearchSysCacheCopy(RELOID, ObjectIdGetDatum(myrelid), @@ -3155,7 +3154,7 @@ ATExecDropNotNull(Relation rel, const char *colName) /* * lookup the attribute */ - attr_rel = heap_openr(AttributeRelationName, RowExclusiveLock); + attr_rel = heap_open(AttributeRelationId, RowExclusiveLock); tuple = SearchSysCacheCopyAttName(RelationGetRelid(rel), colName); @@ -3248,7 +3247,7 @@ ATExecSetNotNull(AlteredTableInfo *tab, Relation rel, /* * lookup the attribute */ - attr_rel = heap_openr(AttributeRelationName, RowExclusiveLock); + attr_rel = heap_open(AttributeRelationId, RowExclusiveLock); tuple = SearchSysCacheCopyAttName(RelationGetRelid(rel), colName); @@ -3396,7 +3395,7 @@ ATExecSetStatistics(Relation rel, const char *colName, Node *newValue) newtarget))); } - attrelation = heap_openr(AttributeRelationName, RowExclusiveLock); + attrelation = heap_open(AttributeRelationId, RowExclusiveLock); tuple = SearchSysCacheCopyAttName(RelationGetRelid(rel), colName); @@ -3457,7 +3456,7 @@ ATExecSetStorage(Relation rel, const char *colName, Node *newValue) newstorage = 0; /* keep compiler quiet */ } - attrelation = heap_openr(AttributeRelationName, RowExclusiveLock); + attrelation = heap_open(AttributeRelationId, RowExclusiveLock); tuple = SearchSysCacheCopyAttName(RelationGetRelid(rel), colName); @@ -3564,7 +3563,7 @@ ATExecDropColumn(Relation rel, const char *colName, Relation attr_rel; ListCell *child; - attr_rel = heap_openr(AttributeRelationName, RowExclusiveLock); + attr_rel = heap_open(AttributeRelationId, RowExclusiveLock); foreach(child, children) { Oid childrelid = lfirst_oid(child); @@ -3652,7 +3651,7 @@ ATExecDropColumn(Relation rel, const char *colName, Relation class_rel; Form_pg_class tuple_class; - class_rel = heap_openr(RelationRelationName, RowExclusiveLock); + class_rel = heap_open(RelationRelationId, RowExclusiveLock); tuple = SearchSysCacheCopy(RELOID, ObjectIdGetDatum(RelationGetRelid(rel)), @@ -4404,10 +4403,10 @@ createForeignKeyTriggers(Relation rel, FkConstraint *fkconstraint, /* * Preset objectAddress fields */ - constrobj.classId = get_system_catalog_relid(ConstraintRelationName); + constrobj.classId = ConstraintRelationId; constrobj.objectId = constrOid; constrobj.objectSubId = 0; - trigobj.classId = get_system_catalog_relid(TriggerRelationName); + trigobj.classId = TriggerRelationId; trigobj.objectSubId = 0; /* Make changes-so-far visible */ @@ -4820,7 +4819,7 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel, SysScanDesc scan; HeapTuple depTup; - attrelation = heap_openr(AttributeRelationName, RowExclusiveLock); + attrelation = heap_open(AttributeRelationId, RowExclusiveLock); /* Look up the target column */ heapTup = SearchSysCacheCopyAttName(RelationGetRelid(rel), colName); @@ -4891,7 +4890,7 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel, * index that implements a constraint will not show a direct * dependency on the column. */ - depRel = heap_openr(DependRelationName, RowExclusiveLock); + depRel = heap_open(DependRelationId, RowExclusiveLock); ScanKeyInit(&key[0], Anum_pg_depend_refclassid, @@ -4906,7 +4905,7 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel, BTEqualStrategyNumber, F_INT4EQ, Int32GetDatum((int32) attnum)); - scan = systable_beginscan(depRel, DependReferenceIndex, true, + scan = systable_beginscan(depRel, DependReferenceIndexId, true, SnapshotNow, 3, key); while (HeapTupleIsValid(depTup = systable_getnext(scan))) @@ -5030,7 +5029,7 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel, BTEqualStrategyNumber, F_INT4EQ, Int32GetDatum((int32) attnum)); - scan = systable_beginscan(depRel, DependDependerIndex, true, + scan = systable_beginscan(depRel, DependDependerIndexId, true, SnapshotNow, 3, key); while (HeapTupleIsValid(depTup = systable_getnext(scan))) @@ -5136,18 +5135,17 @@ ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab) * It should be okay to use DROP_RESTRICT here, since nothing else * should be depending on these objects. */ - if (tab->changedConstraintOids) - obj.classId = get_system_catalog_relid(ConstraintRelationName); foreach(l, tab->changedConstraintOids) { + obj.classId = ConstraintRelationId; obj.objectId = lfirst_oid(l); obj.objectSubId = 0; performDeletion(&obj, DROP_RESTRICT); } - obj.classId = RelationRelationId; foreach(l, tab->changedIndexOids) { + obj.classId = RelationRelationId; obj.objectId = lfirst_oid(l); obj.objectSubId = 0; performDeletion(&obj, DROP_RESTRICT); @@ -5266,7 +5264,7 @@ ATExecChangeOwner(Oid relationOid, int32 newOwnerSysId) target_rel = relation_open(relationOid, AccessExclusiveLock); /* Get its pg_class tuple, too */ - class_rel = heap_openr(RelationRelationName, RowExclusiveLock); + class_rel = heap_open(RelationRelationId, RowExclusiveLock); tuple = SearchSysCache(RELOID, ObjectIdGetDatum(relationOid), @@ -5396,7 +5394,7 @@ change_owner_recurse_to_sequences(Oid relationOid, int32 newOwnerSysId) * SERIAL sequences are those having an internal dependency on one * of the table's columns (we don't care *which* column, exactly). */ - depRel = heap_openr(DependRelationName, AccessShareLock); + depRel = heap_open(DependRelationId, AccessShareLock); ScanKeyInit(&key[0], Anum_pg_depend_refclassid, @@ -5408,7 +5406,7 @@ change_owner_recurse_to_sequences(Oid relationOid, int32 newOwnerSysId) ObjectIdGetDatum(relationOid)); /* we leave refobjsubid unspecified */ - scan = systable_beginscan(depRel, DependReferenceIndex, true, + scan = systable_beginscan(depRel, DependReferenceIndexId, true, SnapshotNow, 2, key); while (HeapTupleIsValid(tup = systable_getnext(scan))) @@ -5587,7 +5585,7 @@ ATExecSetTableSpace(Oid tableOid, Oid newTableSpace) reltoastidxid = rel->rd_rel->reltoastidxid; /* Get a modifiable copy of the relation's pg_class row */ - pg_class = heap_openr(RelationRelationName, RowExclusiveLock); + pg_class = heap_open(RelationRelationId, RowExclusiveLock); tuple = SearchSysCacheCopy(RELOID, ObjectIdGetDatum(tableOid), @@ -5909,7 +5907,7 @@ AlterTableCreateToastTable(Oid relOid, bool silent) /* * Store the toast table's OID in the parent relation's pg_class row */ - class_rel = heap_openr(RelationRelationName, RowExclusiveLock); + class_rel = heap_open(RelationRelationId, RowExclusiveLock); reltup = SearchSysCacheCopy(RELOID, ObjectIdGetDatum(relOid), diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c index 81a5e6478c..5f4d02d7f2 100644 --- a/src/backend/commands/tablespace.c +++ b/src/backend/commands/tablespace.c @@ -50,7 +50,6 @@ #include "access/heapam.h" #include "catalog/catalog.h" -#include "catalog/catname.h" #include "catalog/indexing.h" #include "catalog/pg_namespace.h" #include "catalog/pg_tablespace.h" @@ -125,7 +124,7 @@ TablespaceCreateDbspace(Oid spcNode, Oid dbNode, bool isRedo) Relation rel; if (!isRedo) - rel = heap_openr(TableSpaceRelationName, ExclusiveLock); + rel = heap_open(TableSpaceRelationId, ExclusiveLock); else rel = NULL; @@ -291,7 +290,7 @@ CreateTableSpace(CreateTableSpaceStmt *stmt) * is to lock the proposed tablename against other would-be creators. * The insertion will roll back if we find problems below. */ - rel = heap_openr(TableSpaceRelationName, RowExclusiveLock); + rel = heap_open(TableSpaceRelationId, RowExclusiveLock); MemSet(nulls, ' ', Natts_pg_tablespace); @@ -407,7 +406,7 @@ DropTableSpace(DropTableSpaceStmt *stmt) * is trying to do DROP TABLESPACE or TablespaceCreateDbspace * concurrently. */ - rel = heap_openr(TableSpaceRelationName, ExclusiveLock); + rel = heap_open(TableSpaceRelationId, ExclusiveLock); /* * Find the target tuple @@ -736,7 +735,7 @@ RenameTableSpace(const char *oldname, const char *newname) Form_pg_tablespace newform; /* Search pg_tablespace */ - rel = heap_openr(TableSpaceRelationName, RowExclusiveLock); + rel = heap_open(TableSpaceRelationId, RowExclusiveLock); ScanKeyInit(&entry[0], Anum_pg_tablespace_spcname, @@ -803,7 +802,7 @@ AlterTableSpaceOwner(const char *name, AclId newOwnerSysId) HeapTuple tup; /* Search pg_tablespace */ - rel = heap_openr(TableSpaceRelationName, RowExclusiveLock); + rel = heap_open(TableSpaceRelationId, RowExclusiveLock); ScanKeyInit(&entry[0], Anum_pg_tablespace_spcname, @@ -952,7 +951,7 @@ get_tablespace_oid(const char *tablespacename) ScanKeyData entry[1]; /* Search pg_tablespace */ - rel = heap_openr(TableSpaceRelationName, AccessShareLock); + rel = heap_open(TableSpaceRelationId, AccessShareLock); ScanKeyInit(&entry[0], Anum_pg_tablespace_spcname, @@ -987,7 +986,7 @@ get_tablespace_name(Oid spc_oid) ScanKeyData entry[1]; /* Search pg_tablespace */ - rel = heap_openr(TableSpaceRelationName, AccessShareLock); + rel = heap_open(TableSpaceRelationId, AccessShareLock); ScanKeyInit(&entry[0], ObjectIdAttributeNumber, diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index c271d7148d..e8905b02a5 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -17,7 +17,6 @@ #include "access/heapam.h" #include "access/xact.h" #include "catalog/catalog.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/namespace.h" @@ -252,12 +251,12 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint) * NOTE that this is cool only because we have AccessExclusiveLock on the * relation, so the trigger set won't be changing underneath us. */ - tgrel = heap_openr(TriggerRelationName, RowExclusiveLock); + tgrel = heap_open(TriggerRelationId, RowExclusiveLock); ScanKeyInit(&key, Anum_pg_trigger_tgrelid, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(RelationGetRelid(rel))); - tgscan = systable_beginscan(tgrel, TriggerRelidNameIndex, true, + tgscan = systable_beginscan(tgrel, TriggerRelidNameIndexId, true, SnapshotNow, 1, &key); while (HeapTupleIsValid(tuple = systable_getnext(tgscan))) { @@ -374,7 +373,7 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint) CatalogUpdateIndexes(tgrel, tuple); - myself.classId = RelationGetRelid(tgrel); + myself.classId = TriggerRelationId; myself.objectId = trigoid; myself.objectSubId = 0; @@ -389,7 +388,7 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint) * backends (and this one too!) are sent SI message to make them * rebuild relcache entries. */ - pgrel = heap_openr(RelationRelationName, RowExclusiveLock); + pgrel = heap_open(RelationRelationId, RowExclusiveLock); tuple = SearchSysCacheCopy(RELOID, ObjectIdGetDatum(RelationGetRelid(rel)), 0, 0, 0); @@ -463,7 +462,7 @@ DropTrigger(Oid relid, const char *trigname, DropBehavior behavior) /* * Find the trigger, verify permissions, set up object address */ - tgrel = heap_openr(TriggerRelationName, AccessShareLock); + tgrel = heap_open(TriggerRelationId, AccessShareLock); ScanKeyInit(&skey[0], Anum_pg_trigger_tgrelid, @@ -475,7 +474,7 @@ DropTrigger(Oid relid, const char *trigname, DropBehavior behavior) BTEqualStrategyNumber, F_NAMEEQ, CStringGetDatum(trigname)); - tgscan = systable_beginscan(tgrel, TriggerRelidNameIndex, true, + tgscan = systable_beginscan(tgrel, TriggerRelidNameIndexId, true, SnapshotNow, 2, skey); tup = systable_getnext(tgscan); @@ -490,7 +489,7 @@ DropTrigger(Oid relid, const char *trigname, DropBehavior behavior) aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_CLASS, get_rel_name(relid)); - object.classId = RelationGetRelid(tgrel); + object.classId = TriggerRelationId; object.objectId = HeapTupleGetOid(tup); object.objectSubId = 0; @@ -519,7 +518,7 @@ RemoveTriggerById(Oid trigOid) HeapTuple tuple; Form_pg_class classForm; - tgrel = heap_openr(TriggerRelationName, RowExclusiveLock); + tgrel = heap_open(TriggerRelationId, RowExclusiveLock); /* * Find the trigger to delete. @@ -529,7 +528,7 @@ RemoveTriggerById(Oid trigOid) BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(trigOid)); - tgscan = systable_beginscan(tgrel, TriggerOidIndex, true, + tgscan = systable_beginscan(tgrel, TriggerOidIndexId, true, SnapshotNow, 1, skey); tup = systable_getnext(tgscan); @@ -572,7 +571,7 @@ RemoveTriggerById(Oid trigOid) * so no one else is creating/deleting triggers on this rel at the * same time. */ - pgrel = heap_openr(RelationRelationName, RowExclusiveLock); + pgrel = heap_open(RelationRelationId, RowExclusiveLock); tuple = SearchSysCacheCopy(RELOID, ObjectIdGetDatum(relid), 0, 0, 0); @@ -636,7 +635,7 @@ renametrig(Oid relid, * NOTE that this is cool only because we have AccessExclusiveLock on the * relation, so the trigger set won't be changing underneath us. */ - tgrel = heap_openr(TriggerRelationName, RowExclusiveLock); + tgrel = heap_open(TriggerRelationId, RowExclusiveLock); /* * First pass -- look for name conflict @@ -649,7 +648,7 @@ renametrig(Oid relid, Anum_pg_trigger_tgname, BTEqualStrategyNumber, F_NAMEEQ, PointerGetDatum(newname)); - tgscan = systable_beginscan(tgrel, TriggerRelidNameIndex, true, + tgscan = systable_beginscan(tgrel, TriggerRelidNameIndexId, true, SnapshotNow, 2, key); if (HeapTupleIsValid(tuple = systable_getnext(tgscan))) ereport(ERROR, @@ -669,7 +668,7 @@ renametrig(Oid relid, Anum_pg_trigger_tgname, BTEqualStrategyNumber, F_NAMEEQ, PointerGetDatum(oldname)); - tgscan = systable_beginscan(tgrel, TriggerRelidNameIndex, true, + tgscan = systable_beginscan(tgrel, TriggerRelidNameIndexId, true, SnapshotNow, 2, key); if (HeapTupleIsValid(tuple = systable_getnext(tgscan))) { @@ -739,7 +738,7 @@ RelationBuildTriggers(Relation relation) triggers = (Trigger *) palloc(ntrigs * sizeof(Trigger)); /* - * Note: since we scan the triggers using TriggerRelidNameIndex, we + * Note: since we scan the triggers using TriggerRelidNameIndexId, we * will be reading the triggers in name order, except possibly during * emergency-recovery operations (ie, IsIgnoringSystemIndexes). This * in turn ensures that triggers will be fired in name order. @@ -749,8 +748,8 @@ RelationBuildTriggers(Relation relation) BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(RelationGetRelid(relation))); - tgrel = heap_openr(TriggerRelationName, AccessShareLock); - tgscan = systable_beginscan(tgrel, TriggerRelidNameIndex, true, + tgrel = heap_open(TriggerRelationId, AccessShareLock); + tgscan = systable_beginscan(tgrel, TriggerRelidNameIndexId, true, SnapshotNow, 1, &skey); while (HeapTupleIsValid(htup = systable_getnext(tgscan))) @@ -2802,7 +2801,7 @@ AfterTriggerSetState(ConstraintsSetStmt *stmt) * First lookup all trigger Oid's for the constraint names. * ---------- */ - tgrel = heap_openr(TriggerRelationName, AccessShareLock); + tgrel = heap_open(TriggerRelationId, AccessShareLock); foreach(l, stmt->constraints) { @@ -2828,7 +2827,7 @@ AfterTriggerSetState(ConstraintsSetStmt *stmt) BTEqualStrategyNumber, F_NAMEEQ, PointerGetDatum(cname)); - tgscan = systable_beginscan(tgrel, TriggerConstrNameIndex, true, + tgscan = systable_beginscan(tgrel, TriggerConstrNameIndexId, true, SnapshotNow, 1, &skey); /* diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c index 9397dda855..5d27c4eef0 100644 --- a/src/backend/commands/typecmds.c +++ b/src/backend/commands/typecmds.c @@ -33,7 +33,6 @@ #include "access/heapam.h" #include "access/genam.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/heap.h" #include "catalog/indexing.h" @@ -458,7 +457,7 @@ RemoveTypeById(Oid typeOid) Relation relation; HeapTuple tup; - relation = heap_openr(TypeRelationName, RowExclusiveLock); + relation = heap_open(TypeRelationId, RowExclusiveLock); tup = SearchSysCache(TYPEOID, ObjectIdGetDatum(typeOid), @@ -1143,7 +1142,7 @@ AlterDomainDefault(List *names, Node *defaultRaw) typename->arrayBounds = NIL; /* Lock the domain in the type table */ - rel = heap_openr(TypeRelationName, RowExclusiveLock); + rel = heap_open(TypeRelationId, RowExclusiveLock); /* Use LookupTypeName here so that shell types can be removed. */ domainoid = LookupTypeName(typename); @@ -1265,7 +1264,7 @@ AlterDomainNotNull(List *names, bool notNull) typename->arrayBounds = NIL; /* Lock the type table */ - typrel = heap_openr(TypeRelationName, RowExclusiveLock); + typrel = heap_open(TypeRelationId, RowExclusiveLock); /* Use LookupTypeName here so that shell types can be found (why?). */ domainoid = LookupTypeName(typename); @@ -1377,7 +1376,7 @@ AlterDomainDropConstraint(List *names, const char *constrName, DropBehavior beha typename->arrayBounds = NIL; /* Lock the type table */ - rel = heap_openr(TypeRelationName, RowExclusiveLock); + rel = heap_open(TypeRelationId, RowExclusiveLock); /* Use LookupTypeName here so that shell types can be removed. */ domainoid = LookupTypeName(typename); @@ -1397,7 +1396,7 @@ AlterDomainDropConstraint(List *names, const char *constrName, DropBehavior beha domainOwnerCheck(tup, typename); /* Grab an appropriate lock on the pg_constraint relation */ - conrel = heap_openr(ConstraintRelationName, RowExclusiveLock); + conrel = heap_open(ConstraintRelationId, RowExclusiveLock); /* Use the index to scan only constraints of the target relation */ ScanKeyInit(&key[0], @@ -1405,7 +1404,7 @@ AlterDomainDropConstraint(List *names, const char *constrName, DropBehavior beha BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(HeapTupleGetOid(tup))); - conscan = systable_beginscan(conrel, ConstraintTypidIndex, true, + conscan = systable_beginscan(conrel, ConstraintTypidIndexId, true, SnapshotNow, 1, key); typTup = (Form_pg_type) GETSTRUCT(tup); @@ -1421,7 +1420,7 @@ AlterDomainDropConstraint(List *names, const char *constrName, DropBehavior beha { ObjectAddress conobj; - conobj.classId = RelationGetRelid(conrel); + conobj.classId = ConstraintRelationId; conobj.objectId = HeapTupleGetOid(contup); conobj.objectSubId = 0; @@ -1464,7 +1463,7 @@ AlterDomainAddConstraint(List *names, Node *newConstraint) typename->arrayBounds = NIL; /* Lock the type table */ - typrel = heap_openr(TypeRelationName, RowExclusiveLock); + typrel = heap_open(TypeRelationId, RowExclusiveLock); /* Use LookupTypeName here so that shell types can be found (why?). */ domainoid = LookupTypeName(typename); @@ -1650,7 +1649,7 @@ get_rels_with_domain(Oid domainOid, LOCKMODE lockmode) * We scan pg_depend to find those things that depend on the domain. * (We assume we can ignore refobjsubid for a domain.) */ - depRel = relation_openr(DependRelationName, AccessShareLock); + depRel = heap_open(DependRelationId, AccessShareLock); ScanKeyInit(&key[0], Anum_pg_depend_refclassid, @@ -1661,7 +1660,7 @@ get_rels_with_domain(Oid domainOid, LOCKMODE lockmode) BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(domainOid)); - depScan = systable_beginscan(depRel, DependReferenceIndex, true, + depScan = systable_beginscan(depRel, DependReferenceIndexId, true, SnapshotNow, 2, key); while (HeapTupleIsValid(depTup = systable_getnext(depScan))) @@ -1927,7 +1926,7 @@ GetDomainConstraints(Oid typeOid) bool notNull = false; Relation conRel; - conRel = heap_openr(ConstraintRelationName, AccessShareLock); + conRel = heap_open(ConstraintRelationId, AccessShareLock); for (;;) { @@ -1961,7 +1960,7 @@ GetDomainConstraints(Oid typeOid) BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(typeOid)); - scan = systable_beginscan(conRel, ConstraintTypidIndex, true, + scan = systable_beginscan(conRel, ConstraintTypidIndexId, true, SnapshotNow, 1, key); while (HeapTupleIsValid(conTup = systable_getnext(scan))) @@ -2052,7 +2051,7 @@ AlterTypeOwner(List *names, AclId newOwnerSysId) typename->arrayBounds = NIL; /* Lock the type table */ - rel = heap_openr(TypeRelationName, RowExclusiveLock); + rel = heap_open(TypeRelationId, RowExclusiveLock); /* Use LookupTypeName here so that shell types can be processed (why?) */ typeOid = LookupTypeName(typename); diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c index ecaf7b93eb..a0b9cedca8 100644 --- a/src/backend/commands/user.c +++ b/src/backend/commands/user.c @@ -13,7 +13,6 @@ #include "postgres.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/indexing.h" #include "catalog/pg_database.h" #include "catalog/pg_group.h" @@ -180,7 +179,7 @@ CreateUser(CreateUserStmt *stmt) * to be sure of what the next usesysid should be, and we need to * protect our eventual update of the flat password file. */ - pg_shadow_rel = heap_openr(ShadowRelationName, ExclusiveLock); + pg_shadow_rel = heap_open(ShadowRelationId, ExclusiveLock); pg_shadow_dsc = RelationGetDescr(pg_shadow_rel); scan = heap_beginscan(pg_shadow_rel, SnapshotNow, 0, NULL); @@ -401,7 +400,7 @@ AlterUser(AlterUserStmt *stmt) * secure exclusive lock to protect our update of the flat password * file. */ - pg_shadow_rel = heap_openr(ShadowRelationName, ExclusiveLock); + pg_shadow_rel = heap_open(ShadowRelationId, ExclusiveLock); pg_shadow_dsc = RelationGetDescr(pg_shadow_rel); tuple = SearchSysCache(SHADOWNAME, @@ -516,7 +515,7 @@ AlterUserSet(AlterUserSetStmt *stmt) * RowExclusiveLock is sufficient, because we don't need to update the * flat password file. */ - rel = heap_openr(ShadowRelationName, RowExclusiveLock); + rel = heap_open(ShadowRelationId, RowExclusiveLock); oldtuple = SearchSysCache(SHADOWNAME, PointerGetDatum(stmt->user), 0, 0, 0); @@ -594,7 +593,7 @@ DropUser(DropUserStmt *stmt) * deleted. Note we secure exclusive lock, because we need to protect * our update of the flat password file. */ - pg_shadow_rel = heap_openr(ShadowRelationName, ExclusiveLock); + pg_shadow_rel = heap_open(ShadowRelationId, ExclusiveLock); pg_shadow_dsc = RelationGetDescr(pg_shadow_rel); foreach(item, stmt->users) @@ -635,7 +634,7 @@ DropUser(DropUserStmt *stmt) * don't read the manual, it doesn't seem to be the behaviour one * would expect either.) -- petere 2000/01/14) */ - pg_rel = heap_openr(DatabaseRelationName, AccessShareLock); + pg_rel = heap_open(DatabaseRelationId, AccessShareLock); pg_dsc = RelationGetDescr(pg_rel); ScanKeyInit(&scankey, @@ -677,7 +676,7 @@ DropUser(DropUserStmt *stmt) * * try calling alter group drop user for every group */ - pg_rel = heap_openr(GroupRelationName, ExclusiveLock); + pg_rel = heap_open(GroupRelationId, ExclusiveLock); pg_dsc = RelationGetDescr(pg_rel); scan = heap_beginscan(pg_rel, SnapshotNow, 0, NULL); while ((tmp_tuple = heap_getnext(scan, ForwardScanDirection)) != NULL) @@ -734,7 +733,7 @@ RenameUser(const char *oldname, const char *newname) int i; /* ExclusiveLock because we need to update the password file */ - rel = heap_openr(ShadowRelationName, ExclusiveLock); + rel = heap_open(ShadowRelationId, ExclusiveLock); dsc = RelationGetDescr(rel); oldtuple = SearchSysCache(SHADOWNAME, @@ -819,13 +818,17 @@ CheckPgUserAclNotNull(void) elog(ERROR, "cache lookup failed for relation %u", ShadowRelationId); if (heap_attisnull(htup, Anum_pg_class_relacl)) + { + Form_pg_class classForm = (Form_pg_class) GETSTRUCT(htup); + ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("before using passwords you must revoke privileges on %s", - ShadowRelationName), + errmsg("before using passwords you must revoke privileges on %s", + NameStr(classForm->relname)), errdetail("This restriction is to prevent unprivileged users from reading the passwords."), errhint("Try REVOKE ALL ON \"%s\" FROM PUBLIC.", - ShadowRelationName))); + NameStr(classForm->relname)))); + } ReleaseSysCache(htup); } @@ -914,7 +917,7 @@ CreateGroup(CreateGroupStmt *stmt) * to be sure of what the next grosysid should be, and we need to * protect our eventual update of the flat group file. */ - pg_group_rel = heap_openr(GroupRelationName, ExclusiveLock); + pg_group_rel = heap_open(GroupRelationId, ExclusiveLock); pg_group_dsc = RelationGetDescr(pg_group_rel); scan = heap_beginscan(pg_group_rel, SnapshotNow, 0, NULL); @@ -1032,7 +1035,7 @@ AlterGroup(AlterGroupStmt *stmt, const char *tag) /* * Secure exclusive lock to protect our update of the flat group file. */ - pg_group_rel = heap_openr(GroupRelationName, ExclusiveLock); + pg_group_rel = heap_open(GroupRelationId, ExclusiveLock); pg_group_dsc = RelationGetDescr(pg_group_rel); /* @@ -1271,7 +1274,7 @@ DropGroup(DropGroupStmt *stmt) /* * Secure exclusive lock to protect our update of the flat group file. */ - pg_group_rel = heap_openr(GroupRelationName, ExclusiveLock); + pg_group_rel = heap_open(GroupRelationId, ExclusiveLock); /* Find and delete the group. */ @@ -1308,7 +1311,7 @@ RenameGroup(const char *oldname, const char *newname) Relation rel; /* ExclusiveLock because we need to update the flat group file */ - rel = heap_openr(GroupRelationName, ExclusiveLock); + rel = heap_open(GroupRelationId, ExclusiveLock); tup = SearchSysCacheCopy(GRONAME, CStringGetDatum(oldname), diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index 19f9118b63..5cc93d4442 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -28,7 +28,6 @@ #include "access/subtrans.h" #include "access/xlog.h" #include "catalog/catalog.h" -#include "catalog/catname.h" #include "catalog/namespace.h" #include "catalog/pg_database.h" #include "catalog/pg_index.h" @@ -542,7 +541,7 @@ get_rel_oids(const RangeVar *vacrel, const char *stmttype) BTEqualStrategyNumber, F_CHAREQ, CharGetDatum(RELKIND_RELATION)); - pgclass = heap_openr(RelationRelationName, AccessShareLock); + pgclass = heap_open(RelationRelationId, AccessShareLock); scan = heap_beginscan(pgclass, SnapshotNow, 1, &key); @@ -642,7 +641,7 @@ vac_update_relstats(Oid relid, BlockNumber num_pages, double num_tuples, /* * update number of tuples and number of pages in pg_class */ - rd = heap_openr(RelationRelationName, RowExclusiveLock); + rd = heap_open(RelationRelationId, RowExclusiveLock); ctup = SearchSysCache(RELOID, ObjectIdGetDatum(relid), @@ -718,7 +717,7 @@ vac_update_dbstats(Oid dbid, HeapTuple tuple; Form_pg_database dbform; - relation = heap_openr(DatabaseRelationName, RowExclusiveLock); + relation = heap_open(DatabaseRelationId, RowExclusiveLock); /* Must use a heap scan, since there's no syscache for pg_database */ ScanKeyInit(&entry[0], @@ -792,7 +791,7 @@ vac_truncate_clog(TransactionId vacuumXID, TransactionId frozenXID) * Note: the "already wrapped" cases should now be impossible due to the * defenses in GetNewTransactionId, but we keep them anyway. */ - relation = heap_openr(DatabaseRelationName, AccessShareLock); + relation = heap_open(DatabaseRelationId, AccessShareLock); scan = heap_beginscan(relation, SnapshotNow, 0, NULL); diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c index 7ac4d15a32..28f8690304 100644 --- a/src/backend/executor/execUtils.c +++ b/src/backend/executor/execUtils.c @@ -40,7 +40,6 @@ #include "access/genam.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/index.h" #include "catalog/catalog.h" #include "catalog/pg_index.h" diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c index ab78a7abdf..ed182d04fe 100644 --- a/src/backend/optimizer/util/plancat.c +++ b/src/backend/optimizer/util/plancat.c @@ -19,7 +19,6 @@ #include "access/genam.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/pg_amop.h" #include "catalog/pg_inherits.h" #include "catalog/pg_index.h" @@ -509,7 +508,7 @@ find_inheritance_children(Oid inhparent) Anum_pg_inherits_inhparent, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(inhparent)); - relation = heap_openr(InheritsRelationName, AccessShareLock); + relation = heap_open(InheritsRelationId, AccessShareLock); scan = heap_beginscan(relation, SnapshotNow, 1, key); while ((inheritsTuple = heap_getnext(scan, ForwardScanDirection)) != NULL) { diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index efc25f4f80..a41be6cca2 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -14,7 +14,6 @@ #include "postgres.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/heap.h" #include "catalog/index.h" #include "catalog/namespace.h" diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c index 064c24a6e5..385d441ac8 100644 --- a/src/backend/parser/parse_func.c +++ b/src/backend/parser/parse_func.c @@ -15,7 +15,6 @@ #include "postgres.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/pg_inherits.h" #include "catalog/pg_proc.h" #include "funcapi.h" @@ -922,7 +921,7 @@ find_inheritors(Oid relid, Oid **supervec) queue = list_make1_oid(relid); visited = NIL; - inhrel = heap_openr(InheritsRelationName, AccessShareLock); + inhrel = heap_open(InheritsRelationId, AccessShareLock); /* * Use queue to do a breadth-first traversal of the inheritance graph diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index 38e22ad0a0..a86297fb9d 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -33,7 +33,6 @@ #include "access/heapam.h" #include "access/xact.h" -#include "catalog/catname.h" #include "catalog/pg_database.h" #include "catalog/pg_shadow.h" #include "libpq/libpq.h" @@ -865,7 +864,7 @@ pgstat_vacuum_tabstat(void) dbidused = 0; dbidlist = (Oid *) palloc(sizeof(Oid) * dbidalloc); - dbrel = heap_openr(DatabaseRelationName, AccessShareLock); + dbrel = heap_open(DatabaseRelationId, AccessShareLock); dbscan = heap_beginscan(dbrel, SnapshotNow, 0, NULL); while ((dbtup = heap_getnext(dbscan, ForwardScanDirection)) != NULL) { diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c index 1ae6a64a90..475ca37640 100644 --- a/src/backend/rewrite/rewriteDefine.c +++ b/src/backend/rewrite/rewriteDefine.c @@ -15,7 +15,6 @@ #include "postgres.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/pg_rewrite.h" @@ -87,7 +86,7 @@ InsertRule(char *rulname, /* * Ready to store new pg_rewrite tuple */ - pg_rewrite_desc = heap_openr(RewriteRelationName, RowExclusiveLock); + pg_rewrite_desc = heap_open(RewriteRelationId, RowExclusiveLock); /* * Check to see if we are replacing an existing tuple @@ -139,8 +138,7 @@ InsertRule(char *rulname, /* If replacing, get rid of old dependencies and make new ones */ if (is_update) - deleteDependencyRecordsFor(RelationGetRelid(pg_rewrite_desc), - rewriteObjectId); + deleteDependencyRecordsFor(RewriteRelationId, rewriteObjectId); /* * Install dependency on rule's relation to ensure it will go away on @@ -570,7 +568,7 @@ RenameRewriteRule(Oid owningRel, const char *oldName, Relation pg_rewrite_desc; HeapTuple ruletup; - pg_rewrite_desc = heap_openr(RewriteRelationName, RowExclusiveLock); + pg_rewrite_desc = heap_open(RewriteRelationId, RowExclusiveLock); ruletup = SearchSysCacheCopy(RULERELNAME, ObjectIdGetDatum(owningRel), diff --git a/src/backend/rewrite/rewriteRemove.c b/src/backend/rewrite/rewriteRemove.c index 8d0c50fc14..c43216190a 100644 --- a/src/backend/rewrite/rewriteRemove.c +++ b/src/backend/rewrite/rewriteRemove.c @@ -16,7 +16,6 @@ #include "access/genam.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/pg_rewrite.h" @@ -72,7 +71,7 @@ RemoveRewriteRule(Oid owningRel, const char *ruleName, DropBehavior behavior) /* * Do the deletion */ - object.classId = get_system_catalog_relid(RewriteRelationName); + object.classId = RewriteRelationId; object.objectId = HeapTupleGetOid(tuple); object.objectSubId = 0; @@ -99,7 +98,7 @@ RemoveRewriteRuleById(Oid ruleOid) /* * Open the pg_rewrite relation. */ - RewriteRelation = heap_openr(RewriteRelationName, RowExclusiveLock); + RewriteRelation = heap_open(RewriteRelationId, RowExclusiveLock); /* * Find the tuple for the target rule. @@ -109,7 +108,7 @@ RemoveRewriteRuleById(Oid ruleOid) BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(ruleOid)); - rcscan = systable_beginscan(RewriteRelation, RewriteOidIndex, true, + rcscan = systable_beginscan(RewriteRelation, RewriteOidIndexId, true, SnapshotNow, 1, skey); tuple = systable_getnext(rcscan); diff --git a/src/backend/rewrite/rewriteSupport.c b/src/backend/rewrite/rewriteSupport.c index 862e8cea0f..4145c750f3 100644 --- a/src/backend/rewrite/rewriteSupport.c +++ b/src/backend/rewrite/rewriteSupport.c @@ -15,7 +15,6 @@ #include "postgres.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/indexing.h" #include "rewrite/rewriteSupport.h" #include "utils/inval.h" @@ -60,7 +59,7 @@ SetRelationRuleStatus(Oid relationId, bool relHasRules, * Find the tuple to update in pg_class, using syscache for the * lookup. */ - relationRelation = heap_openr(RelationRelationName, RowExclusiveLock); + relationRelation = heap_open(RelationRelationId, RowExclusiveLock); tuple = SearchSysCacheCopy(RELOID, ObjectIdGetDatum(relationId), 0, 0, 0); diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c index bc73e24237..077b2f51e2 100644 --- a/src/backend/storage/large_object/inv_api.c +++ b/src/backend/storage/large_object/inv_api.c @@ -19,7 +19,6 @@ #include "access/heapam.h" #include "access/tuptoaster.h" #include "catalog/catalog.h" -#include "catalog/catname.h" #include "catalog/indexing.h" #include "catalog/pg_largeobject.h" #include "commands/comment.h" @@ -60,9 +59,9 @@ open_lo_relation(void) /* Use RowExclusiveLock since we might either read or write */ if (lo_heap_r == NULL) - lo_heap_r = heap_openr(LargeObjectRelationName, RowExclusiveLock); + lo_heap_r = heap_open(LargeObjectRelationId, RowExclusiveLock); if (lo_index_r == NULL) - lo_index_r = index_openr(LargeObjectLOidPNIndex); + lo_index_r = index_open(LargeObjectLOidPNIndexId); } PG_CATCH(); { @@ -230,15 +229,10 @@ inv_close(LargeObjectDesc *obj_desc) int inv_drop(Oid lobjId) { - Oid classoid; - LargeObjectDrop(lobjId); - /* pg_largeobject doesn't have a hard-coded OID, so must look it up */ - classoid = get_system_catalog_relid(LargeObjectRelationName); - /* Delete any comments on the large object */ - DeleteComments(lobjId, classoid, 0); + DeleteComments(lobjId, LargeObjectRelationId, 0); /* * Advance command counter so that tuple removal will be seen by later diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c index 41d7bb0c08..9b8e53b8ac 100644 --- a/src/backend/utils/adt/regproc.c +++ b/src/backend/utils/adt/regproc.c @@ -23,7 +23,6 @@ #include "access/genam.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/indexing.h" #include "catalog/namespace.h" #include "catalog/pg_operator.h" @@ -97,8 +96,8 @@ regprocin(PG_FUNCTION_ARGS) BTEqualStrategyNumber, F_NAMEEQ, CStringGetDatum(pro_name_or_oid)); - hdesc = heap_openr(ProcedureRelationName, AccessShareLock); - sysscan = systable_beginscan(hdesc, ProcedureNameArgsNspIndex, true, + hdesc = heap_open(ProcedureRelationId, AccessShareLock); + sysscan = systable_beginscan(hdesc, ProcedureNameArgsNspIndexId, true, SnapshotNow, 1, skey); while (HeapTupleIsValid(tuple = systable_getnext(sysscan))) @@ -447,8 +446,8 @@ regoperin(PG_FUNCTION_ARGS) BTEqualStrategyNumber, F_NAMEEQ, CStringGetDatum(opr_name_or_oid)); - hdesc = heap_openr(OperatorRelationName, AccessShareLock); - sysscan = systable_beginscan(hdesc, OperatorNameNspIndex, true, + hdesc = heap_open(OperatorRelationId, AccessShareLock); + sysscan = systable_beginscan(hdesc, OperatorNameNspIndexId, true, SnapshotNow, 1, skey); while (HeapTupleIsValid(tuple = systable_getnext(sysscan))) @@ -825,8 +824,8 @@ regclassin(PG_FUNCTION_ARGS) BTEqualStrategyNumber, F_NAMEEQ, CStringGetDatum(class_name_or_oid)); - hdesc = heap_openr(RelationRelationName, AccessShareLock); - sysscan = systable_beginscan(hdesc, ClassNameNspIndex, true, + hdesc = heap_open(RelationRelationId, AccessShareLock); + sysscan = systable_beginscan(hdesc, ClassNameNspIndexId, true, SnapshotNow, 1, skey); if (HeapTupleIsValid(tuple = systable_getnext(sysscan))) @@ -991,8 +990,8 @@ regtypein(PG_FUNCTION_ARGS) BTEqualStrategyNumber, F_NAMEEQ, CStringGetDatum(typ_name_or_oid)); - hdesc = heap_openr(TypeRelationName, AccessShareLock); - sysscan = systable_beginscan(hdesc, TypeNameNspIndex, true, + hdesc = heap_open(TypeRelationId, AccessShareLock); + sysscan = systable_beginscan(hdesc, TypeNameNspIndexId, true, SnapshotNow, 1, skey); if (HeapTupleIsValid(tuple = systable_getnext(sysscan))) diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 623eb3a2f1..f726106a45 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -41,7 +41,6 @@ #include <fcntl.h> #include "access/genam.h" -#include "catalog/catname.h" #include "catalog/dependency.h" #include "catalog/heap.h" #include "catalog/index.h" @@ -469,14 +468,14 @@ pg_get_triggerdef(PG_FUNCTION_ARGS) /* * Fetch the pg_trigger tuple by the Oid of the trigger */ - tgrel = heap_openr(TriggerRelationName, AccessShareLock); + tgrel = heap_open(TriggerRelationId, AccessShareLock); ScanKeyInit(&skey[0], ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(trigid)); - tgscan = systable_beginscan(tgrel, TriggerOidIndex, true, + tgscan = systable_beginscan(tgrel, TriggerOidIndexId, true, SnapshotNow, 1, skey); ht_trig = systable_getnext(tgscan); @@ -867,14 +866,14 @@ pg_get_constraintdef_worker(Oid constraintId, bool fullCommand, * Fetch the pg_constraint row. There's no syscache for pg_constraint * so we must do it the hard way. */ - conDesc = heap_openr(ConstraintRelationName, AccessShareLock); + conDesc = heap_open(ConstraintRelationId, AccessShareLock); ScanKeyInit(&skey[0], ObjectIdAttributeNumber, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(constraintId)); - conscan = systable_beginscan(conDesc, ConstraintOidIndex, true, + conscan = systable_beginscan(conDesc, ConstraintOidIndexId, true, SnapshotNow, 1, skey); tup = systable_getnext(conscan); @@ -1269,7 +1268,7 @@ pg_get_serial_sequence(PG_FUNCTION_ARGS) column, tablerv->relname))); /* Search the dependency table for the dependent sequence */ - depRel = heap_openr(DependRelationName, AccessShareLock); + depRel = heap_open(DependRelationId, AccessShareLock); ScanKeyInit(&key[0], Anum_pg_depend_refclassid, @@ -1284,7 +1283,7 @@ pg_get_serial_sequence(PG_FUNCTION_ARGS) BTEqualStrategyNumber, F_INT4EQ, Int32GetDatum(attnum)); - scan = systable_beginscan(depRel, DependReferenceIndex, true, + scan = systable_beginscan(depRel, DependReferenceIndexId, true, SnapshotNow, 3, key); while (HeapTupleIsValid(tup = systable_getnext(scan))) diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 01a1312f06..f12f3725c5 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -79,7 +79,6 @@ #include "access/heapam.h" #include "access/nbtree.h" #include "access/tuptoaster.h" -#include "catalog/catname.h" #include "catalog/pg_namespace.h" #include "catalog/pg_opclass.h" #include "catalog/pg_operator.h" diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c index cebdcf6ebd..ac96f6b471 100644 --- a/src/backend/utils/cache/catcache.c +++ b/src/backend/utils/cache/catcache.c @@ -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 394a5d4736..5560bc7e33 100644 --- a/src/backend/utils/cache/lsyscache.c +++ b/src/backend/utils/cache/lsyscache.c @@ -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 66cd917d9e..c2e8a366b3 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -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 dead3b1fd7..29fb55aa37 100644 --- a/src/backend/utils/cache/syscache.c +++ b/src/backend/utils/cache/syscache.c @@ -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 03c26d9325..8dce40cce1 100644 --- a/src/backend/utils/cache/typcache.c +++ b/src/backend/utils/cache/typcache.c @@ -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))) diff --git a/src/backend/utils/init/flatfiles.c b/src/backend/utils/init/flatfiles.c index 6e5930a51f..c38d2cf9d6 100644 --- a/src/backend/utils/init/flatfiles.c +++ b/src/backend/utils/init/flatfiles.c @@ -32,7 +32,6 @@ #include <unistd.h> #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/pg_database.h" #include "catalog/pg_group.h" #include "catalog/pg_namespace.h" @@ -724,11 +723,11 @@ AtEOXact_UpdateFlatFiles(bool isCommit) * so get the locks we need before writing anything. */ if (database_file_update_subid != InvalidSubTransactionId) - drel = heap_openr(DatabaseRelationName, ExclusiveLock); + drel = heap_open(DatabaseRelationId, ExclusiveLock); if (group_file_update_subid != InvalidSubTransactionId) - grel = heap_openr(GroupRelationName, ExclusiveLock); + grel = heap_open(GroupRelationId, ExclusiveLock); if (user_file_update_subid != InvalidSubTransactionId) - urel = heap_openr(ShadowRelationName, ExclusiveLock); + urel = heap_open(ShadowRelationId, ExclusiveLock); /* Okay to write the files */ if (database_file_update_subid != InvalidSubTransactionId) diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index 4085f5b8a9..c1294b7eb5 100644 --- a/src/backend/utils/init/miscinit.c +++ b/src/backend/utils/init/miscinit.c @@ -29,7 +29,6 @@ #include <utime.h> #endif -#include "catalog/catname.h" #include "catalog/pg_shadow.h" #include "libpq/libpq-be.h" #include "miscadmin.h" diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index aeb4424460..d41735ab0f 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -22,7 +22,6 @@ #include "catalog/catalog.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/namespace.h" #include "catalog/pg_database.h" #include "catalog/pg_shadow.h" @@ -134,7 +133,7 @@ ReverifyMyDatabase(const char *name) * Because we grab RowShareLock here, we can be sure that dropdb() * is not running in parallel with us (any more). */ - pgdbrel = heap_openr(DatabaseRelationName, RowShareLock); + pgdbrel = heap_open(DatabaseRelationId, RowShareLock); ScanKeyInit(&key, Anum_pg_database_datname, @@ -537,7 +536,7 @@ ThereIsAtLeastOneUser(void) HeapScanDesc scan; bool result; - pg_shadow_rel = heap_openr(ShadowRelationName, AccessExclusiveLock); + pg_shadow_rel = heap_open(ShadowRelationId, AccessExclusiveLock); pg_shadow_dsc = RelationGetDescr(pg_shadow_rel); scan = heap_beginscan(pg_shadow_rel, SnapshotNow, 0, NULL); diff --git a/src/include/access/genam.h b/src/include/access/genam.h index 780163cedc..c4f95f9358 100644 --- a/src/include/access/genam.h +++ b/src/include/access/genam.h @@ -70,7 +70,6 @@ typedef SysScanDescData *SysScanDesc; */ extern Relation index_open(Oid relationId); extern Relation index_openrv(const RangeVar *relation); -extern Relation index_openr(const char *sysRelationName); extern void index_close(Relation relation); extern bool index_insert(Relation indexRelation, Datum *values, bool *isnull, @@ -119,7 +118,7 @@ extern void IndexScanEnd(IndexScanDesc scan); * heap-or-index access to system catalogs (in genam.c) */ extern SysScanDesc systable_beginscan(Relation heapRelation, - const char *indexRelname, + Oid indexId, bool indexOK, Snapshot snapshot, int nkeys, ScanKey key); diff --git a/src/include/access/heapam.h b/src/include/access/heapam.h index 6fb3076170..828c820e64 100644 --- a/src/include/access/heapam.h +++ b/src/include/access/heapam.h @@ -126,12 +126,10 @@ extern Datum fastgetattr(HeapTuple tup, int attnum, TupleDesc tupleDesc, extern Relation relation_open(Oid relationId, LOCKMODE lockmode); extern Relation conditional_relation_open(Oid relationId, LOCKMODE lockmode, bool nowait); extern Relation relation_openrv(const RangeVar *relation, LOCKMODE lockmode); -extern Relation relation_openr(const char *sysRelationName, LOCKMODE lockmode); extern void relation_close(Relation relation, LOCKMODE lockmode); extern Relation heap_open(Oid relationId, LOCKMODE lockmode); extern Relation heap_openrv(const RangeVar *relation, LOCKMODE lockmode); -extern Relation heap_openr(const char *sysRelationName, LOCKMODE lockmode); #define heap_close(r,l) relation_close(r,l) diff --git a/src/include/catalog/catname.h b/src/include/catalog/catname.h deleted file mode 100644 index 9f25f81cf6..0000000000 --- a/src/include/catalog/catname.h +++ /dev/null @@ -1,48 +0,0 @@ -/*------------------------------------------------------------------------- - * - * catname.h - * POSTGRES system catalog relation name definitions. - * - * - * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * $PostgreSQL$ - * - *------------------------------------------------------------------------- - */ -#ifndef CATNAME_H -#define CATNAME_H - - -#define AggregateRelationName "pg_aggregate" -#define AccessMethodRelationName "pg_am" -#define AccessMethodOperatorRelationName "pg_amop" -#define AccessMethodProcedureRelationName "pg_amproc" -#define AttributeRelationName "pg_attribute" -#define CastRelationName "pg_cast" -#define ConstraintRelationName "pg_constraint" -#define ConversionRelationName "pg_conversion" -#define DatabaseRelationName "pg_database" -#define DependRelationName "pg_depend" -#define DescriptionRelationName "pg_description" -#define GroupRelationName "pg_group" -#define IndexRelationName "pg_index" -#define InheritsRelationName "pg_inherits" -#define LanguageRelationName "pg_language" -#define LargeObjectRelationName "pg_largeobject" -#define ListenerRelationName "pg_listener" -#define NamespaceRelationName "pg_namespace" -#define OperatorClassRelationName "pg_opclass" -#define OperatorRelationName "pg_operator" -#define ProcedureRelationName "pg_proc" -#define RelationRelationName "pg_class" -#define RewriteRelationName "pg_rewrite" -#define ShadowRelationName "pg_shadow" -#define StatisticRelationName "pg_statistic" -#define TableSpaceRelationName "pg_tablespace" -#define TypeRelationName "pg_type" -#define AttrDefaultRelationName "pg_attrdef" -#define TriggerRelationName "pg_trigger" - -#endif /* CATNAME_H */ diff --git a/src/include/catalog/indexing.h b/src/include/catalog/indexing.h index 327b16984b..7cf7051b6a 100644 --- a/src/include/catalog/indexing.h +++ b/src/include/catalog/indexing.h @@ -17,68 +17,6 @@ #include "access/htup.h" -/* - * Names of indexes on system catalogs - * - * References to specific system indexes in the C code should use these - * macros rather than hardwiring the actual index name. - */ -#define AccessMethodOperatorIndex "pg_amop_opr_opc_index" -#define AccessMethodStrategyIndex "pg_amop_opc_strat_index" -#define AccessMethodProcedureIndex "pg_amproc_opc_proc_index" -#define AggregateFnoidIndex "pg_aggregate_fnoid_index" -#define AmNameIndex "pg_am_name_index" -#define AmOidIndex "pg_am_oid_index" -#define AttrDefaultIndex "pg_attrdef_adrelid_adnum_index" -#define AttrDefaultOidIndex "pg_attrdef_oid_index" -#define AttributeRelidNameIndex "pg_attribute_relid_attnam_index" -#define AttributeRelidNumIndex "pg_attribute_relid_attnum_index" -#define CastOidIndex "pg_cast_oid_index" -#define CastSourceTargetIndex "pg_cast_source_target_index" -#define ClassNameNspIndex "pg_class_relname_nsp_index" -#define ClassOidIndex "pg_class_oid_index" -#define ConstraintNameNspIndex "pg_constraint_conname_nsp_index" -#define ConstraintOidIndex "pg_constraint_oid_index" -#define ConstraintRelidIndex "pg_constraint_conrelid_index" -#define ConstraintTypidIndex "pg_constraint_contypid_index" -#define ConversionDefaultIndex "pg_conversion_default_index" -#define ConversionNameNspIndex "pg_conversion_name_nsp_index" -#define ConversionOidIndex "pg_conversion_oid_index" -#define DatabaseNameIndex "pg_database_datname_index" -#define DatabaseOidIndex "pg_database_oid_index" -#define DependDependerIndex "pg_depend_depender_index" -#define DependReferenceIndex "pg_depend_reference_index" -#define DescriptionObjIndex "pg_description_o_c_o_index" -#define GroupNameIndex "pg_group_name_index" -#define GroupSysidIndex "pg_group_sysid_index" -#define IndexIndrelidIndex "pg_index_indrelid_index" -#define IndexRelidIndex "pg_index_indexrelid_index" -#define InheritsRelidSeqnoIndex "pg_inherits_relid_seqno_index" -#define LanguageNameIndex "pg_language_name_index" -#define LanguageOidIndex "pg_language_oid_index" -#define LargeObjectLOidPNIndex "pg_largeobject_loid_pn_index" -#define NamespaceNameIndex "pg_namespace_nspname_index" -#define NamespaceOidIndex "pg_namespace_oid_index" -#define OpclassAmNameNspIndex "pg_opclass_am_name_nsp_index" -#define OpclassOidIndex "pg_opclass_oid_index" -#define OperatorNameNspIndex "pg_operator_oprname_l_r_n_index" -#define OperatorOidIndex "pg_operator_oid_index" -#define ProcedureNameArgsNspIndex "pg_proc_proname_args_nsp_index" -#define ProcedureOidIndex "pg_proc_oid_index" -#define RewriteOidIndex "pg_rewrite_oid_index" -#define RewriteRelRulenameIndex "pg_rewrite_rel_rulename_index" -#define ShadowNameIndex "pg_shadow_usename_index" -#define ShadowSysidIndex "pg_shadow_usesysid_index" -#define StatisticRelidAttnumIndex "pg_statistic_relid_att_index" -#define TablespaceNameIndex "pg_tablespace_spcname_index" -#define TablespaceOidIndex "pg_tablespace_oid_index" -#define TriggerConstrNameIndex "pg_trigger_tgconstrname_index" -#define TriggerConstrRelidIndex "pg_trigger_tgconstrrelid_index" -#define TriggerRelidNameIndex "pg_trigger_tgrelid_tgname_index" -#define TriggerOidIndex "pg_trigger_oid_index" -#define TypeNameNspIndex "pg_type_typname_nsp_index" -#define TypeOidIndex "pg_type_oid_index" - /* * The state object used by CatalogOpenIndexes and friends is actually the @@ -113,6 +51,10 @@ extern void CatalogUpdateIndexes(Relation heapRel, HeapTuple heapTuple); * The keyword is DECLARE_INDEX or DECLARE_UNIQUE_INDEX. The first two * arguments are the index name and OID, the rest is much like a standard * 'create index' SQL command. + * + * For each index, we also provide a #define for its OID. References to + * the index in the C code should always use these #defines, not the actual + * index name (much less the numeric OID). */ DECLARE_UNIQUE_INDEX(pg_aggregate_fnoid_index,2650, on pg_aggregate using btree(aggfnoid oid_ops)); diff --git a/src/include/utils/catcache.h b/src/include/utils/catcache.h index f7506af74f..a60828995b 100644 --- a/src/include/utils/catcache.h +++ b/src/include/utils/catcache.h @@ -36,8 +36,8 @@ typedef struct catcache int id; /* cache identifier --- see syscache.h */ struct catcache *cc_next; /* link to next catcache */ const char *cc_relname; /* name of relation the tuples come from */ - const char *cc_indname; /* name of index matching cache keys */ Oid cc_reloid; /* OID of relation the tuples come from */ + Oid cc_indexoid; /* OID of index matching cache keys */ bool cc_relisshared; /* is relation shared across databases? */ TupleDesc cc_tupdesc; /* tuple descriptor (copied from reldesc) */ int cc_reloidattr; /* AttrNumber of relation OID attr, or 0 */ @@ -164,7 +164,7 @@ extern DLLIMPORT MemoryContext CacheMemoryContext; extern void CreateCacheMemoryContext(void); extern void AtEOXact_CatCache(bool isCommit); -extern CatCache *InitCatCache(int id, const char *relname, const char *indname, +extern CatCache *InitCatCache(int id, Oid reloid, Oid indexoid, int reloidattr, int nkeys, const int *key); extern void InitCatCachePhase2(CatCache *cache); diff --git a/src/include/utils/lsyscache.h b/src/include/utils/lsyscache.h index 1d5abe4a00..245185e6dd 100644 --- a/src/include/utils/lsyscache.h +++ b/src/include/utils/lsyscache.h @@ -62,7 +62,6 @@ extern bool get_func_retset(Oid funcid); extern bool func_strict(Oid funcid); extern char func_volatile(Oid funcid); extern Oid get_relname_relid(const char *relname, Oid relnamespace); -extern Oid get_system_catalog_relid(const char *catname); extern char *get_rel_name(Oid relid); extern Oid get_rel_namespace(Oid relid); extern Oid get_rel_type_id(Oid relid); diff --git a/src/include/utils/relcache.h b/src/include/utils/relcache.h index 195e46886c..e4690998e2 100644 --- a/src/include/utils/relcache.h +++ b/src/include/utils/relcache.h @@ -20,7 +20,6 @@ * 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); diff --git a/src/pl/plpgsql/src/pl_comp.c b/src/pl/plpgsql/src/pl_comp.c index 6de6d192d1..c155e4d5eb 100644 --- a/src/pl/plpgsql/src/pl_comp.c +++ b/src/pl/plpgsql/src/pl_comp.c @@ -42,7 +42,6 @@ #include "pl.tab.h" #include "access/heapam.h" -#include "catalog/catname.h" #include "catalog/namespace.h" #include "catalog/pg_attribute.h" #include "catalog/pg_attrdef.h" |