diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c
index eadcf6af0d..6e8f6a5705 100644
--- a/src/backend/catalog/dependency.c
+++ b/src/backend/catalog/dependency.c
@@ -206,7 +206,7 @@ deleteObjectsInList(ObjectAddresses *targetObjects, Relation *depRel,
 			if (extra->flags & DEPFLAG_REVERSE)
 				normal = true;
 
-			if (EventTriggerSupportsObjectClass(getObjectClass(thisobj)))
+			if (EventTriggerSupportsObject(thisobj))
 			{
 				EventTriggerSQLDropAddObject(thisobj, original, normal);
 			}
@@ -1349,9 +1349,9 @@ deleteOneObject(const ObjectAddress *object, Relation *depRel, int flags)
 static void
 doDeletion(const ObjectAddress *object, int flags)
 {
-	switch (getObjectClass(object))
+	switch (object->classId)
 	{
-		case OCLASS_CLASS:
+		case RelationRelationId:
 			{
 				char		relKind = get_rel_relkind(object->objectId);
 
@@ -1382,104 +1382,102 @@ doDeletion(const ObjectAddress *object, int flags)
 				break;
 			}
 
-		case OCLASS_PROC:
+		case ProcedureRelationId:
 			RemoveFunctionById(object->objectId);
 			break;
 
-		case OCLASS_TYPE:
+		case TypeRelationId:
 			RemoveTypeById(object->objectId);
 			break;
 
-		case OCLASS_CONSTRAINT:
+		case ConstraintRelationId:
 			RemoveConstraintById(object->objectId);
 			break;
 
-		case OCLASS_DEFAULT:
+		case AttrDefaultRelationId:
 			RemoveAttrDefaultById(object->objectId);
 			break;
 
-		case OCLASS_LARGEOBJECT:
+		case LargeObjectRelationId:
 			LargeObjectDrop(object->objectId);
 			break;
 
-		case OCLASS_OPERATOR:
+		case OperatorRelationId:
 			RemoveOperatorById(object->objectId);
 			break;
 
-		case OCLASS_REWRITE:
+		case RewriteRelationId:
 			RemoveRewriteRuleById(object->objectId);
 			break;
 
-		case OCLASS_TRIGGER:
+		case TriggerRelationId:
 			RemoveTriggerById(object->objectId);
 			break;
 
-		case OCLASS_STATISTIC_EXT:
+		case StatisticExtRelationId:
 			RemoveStatisticsById(object->objectId);
 			break;
 
-		case OCLASS_TSCONFIG:
+		case TSConfigRelationId:
 			RemoveTSConfigurationById(object->objectId);
 			break;
 
-		case OCLASS_EXTENSION:
+		case ExtensionRelationId:
 			RemoveExtensionById(object->objectId);
 			break;
 
-		case OCLASS_POLICY:
+		case PolicyRelationId:
 			RemovePolicyById(object->objectId);
 			break;
 
-		case OCLASS_PUBLICATION_NAMESPACE:
+		case PublicationNamespaceRelationId:
 			RemovePublicationSchemaById(object->objectId);
 			break;
 
-		case OCLASS_PUBLICATION_REL:
+		case PublicationRelRelationId:
 			RemovePublicationRelById(object->objectId);
 			break;
 
-		case OCLASS_PUBLICATION:
+		case PublicationRelationId:
 			RemovePublicationById(object->objectId);
 			break;
 
-		case OCLASS_CAST:
-		case OCLASS_COLLATION:
-		case OCLASS_CONVERSION:
-		case OCLASS_LANGUAGE:
-		case OCLASS_OPCLASS:
-		case OCLASS_OPFAMILY:
-		case OCLASS_AM:
-		case OCLASS_AMOP:
-		case OCLASS_AMPROC:
-		case OCLASS_SCHEMA:
-		case OCLASS_TSPARSER:
-		case OCLASS_TSDICT:
-		case OCLASS_TSTEMPLATE:
-		case OCLASS_FDW:
-		case OCLASS_FOREIGN_SERVER:
-		case OCLASS_USER_MAPPING:
-		case OCLASS_DEFACL:
-		case OCLASS_EVENT_TRIGGER:
-		case OCLASS_TRANSFORM:
-		case OCLASS_ROLE_MEMBERSHIP:
+		case CastRelationId:
+		case CollationRelationId:
+		case ConversionRelationId:
+		case LanguageRelationId:
+		case OperatorClassRelationId:
+		case OperatorFamilyRelationId:
+		case AccessMethodRelationId:
+		case AccessMethodOperatorRelationId:
+		case AccessMethodProcedureRelationId:
+		case NamespaceRelationId:
+		case TSParserRelationId:
+		case TSDictionaryRelationId:
+		case TSTemplateRelationId:
+		case ForeignDataWrapperRelationId:
+		case ForeignServerRelationId:
+		case UserMappingRelationId:
+		case DefaultAclRelationId:
+		case EventTriggerRelationId:
+		case TransformRelationId:
+		case AuthMemRelationId:
 			DropObjectById(object);
 			break;
 
 			/*
 			 * These global object types are not supported here.
 			 */
-		case OCLASS_ROLE:
-		case OCLASS_DATABASE:
-		case OCLASS_TBLSPACE:
-		case OCLASS_SUBSCRIPTION:
-		case OCLASS_PARAMETER_ACL:
+		case AuthIdRelationId:
+		case DatabaseRelationId:
+		case TableSpaceRelationId:
+		case SubscriptionRelationId:
+		case ParameterAclRelationId:
 			elog(ERROR, "global objects cannot be deleted by doDeletion");
 			break;
 
-			/*
-			 * There's intentionally no default: case here; we want the
-			 * compiler to warn if a new OCLASS hasn't been handled above.
-			 */
+		default:
+			elog(ERROR, "unsupported object class: %u", object->classId);
 	}
 }
 
@@ -2774,153 +2772,6 @@ free_object_addresses(ObjectAddresses *addrs)
 	pfree(addrs);
 }
 
-/*
- * Determine the class of a given object identified by objectAddress.
- *
- * We implement it as a function instead of an array because the OIDs aren't
- * consecutive.
- */
-ObjectClass
-getObjectClass(const ObjectAddress *object)
-{
-	/* only pg_class entries can have nonzero objectSubId */
-	if (object->classId != RelationRelationId &&
-		object->objectSubId != 0)
-		elog(ERROR, "invalid non-zero objectSubId for object class %u",
-			 object->classId);
-
-	switch (object->classId)
-	{
-		case RelationRelationId:
-			/* caller must check objectSubId */
-			return OCLASS_CLASS;
-
-		case ProcedureRelationId:
-			return OCLASS_PROC;
-
-		case TypeRelationId:
-			return OCLASS_TYPE;
-
-		case CastRelationId:
-			return OCLASS_CAST;
-
-		case CollationRelationId:
-			return OCLASS_COLLATION;
-
-		case ConstraintRelationId:
-			return OCLASS_CONSTRAINT;
-
-		case ConversionRelationId:
-			return OCLASS_CONVERSION;
-
-		case AttrDefaultRelationId:
-			return OCLASS_DEFAULT;
-
-		case LanguageRelationId:
-			return OCLASS_LANGUAGE;
-
-		case LargeObjectRelationId:
-			return OCLASS_LARGEOBJECT;
-
-		case OperatorRelationId:
-			return OCLASS_OPERATOR;
-
-		case OperatorClassRelationId:
-			return OCLASS_OPCLASS;
-
-		case OperatorFamilyRelationId:
-			return OCLASS_OPFAMILY;
-
-		case AccessMethodRelationId:
-			return OCLASS_AM;
-
-		case AccessMethodOperatorRelationId:
-			return OCLASS_AMOP;
-
-		case AccessMethodProcedureRelationId:
-			return OCLASS_AMPROC;
-
-		case RewriteRelationId:
-			return OCLASS_REWRITE;
-
-		case TriggerRelationId:
-			return OCLASS_TRIGGER;
-
-		case NamespaceRelationId:
-			return OCLASS_SCHEMA;
-
-		case StatisticExtRelationId:
-			return OCLASS_STATISTIC_EXT;
-
-		case TSParserRelationId:
-			return OCLASS_TSPARSER;
-
-		case TSDictionaryRelationId:
-			return OCLASS_TSDICT;
-
-		case TSTemplateRelationId:
-			return OCLASS_TSTEMPLATE;
-
-		case TSConfigRelationId:
-			return OCLASS_TSCONFIG;
-
-		case AuthIdRelationId:
-			return OCLASS_ROLE;
-
-		case AuthMemRelationId:
-			return OCLASS_ROLE_MEMBERSHIP;
-
-		case DatabaseRelationId:
-			return OCLASS_DATABASE;
-
-		case TableSpaceRelationId:
-			return OCLASS_TBLSPACE;
-
-		case ForeignDataWrapperRelationId:
-			return OCLASS_FDW;
-
-		case ForeignServerRelationId:
-			return OCLASS_FOREIGN_SERVER;
-
-		case UserMappingRelationId:
-			return OCLASS_USER_MAPPING;
-
-		case DefaultAclRelationId:
-			return OCLASS_DEFACL;
-
-		case ExtensionRelationId:
-			return OCLASS_EXTENSION;
-
-		case EventTriggerRelationId:
-			return OCLASS_EVENT_TRIGGER;
-
-		case ParameterAclRelationId:
-			return OCLASS_PARAMETER_ACL;
-
-		case PolicyRelationId:
-			return OCLASS_POLICY;
-
-		case PublicationNamespaceRelationId:
-			return OCLASS_PUBLICATION_NAMESPACE;
-
-		case PublicationRelationId:
-			return OCLASS_PUBLICATION;
-
-		case PublicationRelRelationId:
-			return OCLASS_PUBLICATION_REL;
-
-		case SubscriptionRelationId:
-			return OCLASS_SUBSCRIPTION;
-
-		case TransformRelationId:
-			return OCLASS_TRANSFORM;
-	}
-
-	/* shouldn't get here */
-	elog(ERROR, "unrecognized object class: %u", object->classId);
-	return OCLASS_CLASS;		/* keep compiler quiet */
-}
-
 /*
  * delete initial ACL for extension objects
  */
diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c
index 360c6b2ba6..7b536ac6fd 100644
--- a/src/backend/catalog/objectaddress.c
+++ b/src/backend/catalog/objectaddress.c
@@ -655,7 +655,6 @@ static const struct object_type_map
 
 			ObjectTypeMap[] =
 {
-	/* OCLASS_CLASS, all kinds of relations */
 	{
 		"table", OBJECT_TABLE
 	},
@@ -704,7 +703,6 @@ static const struct object_type_map
 	{
 		"foreign table column", OBJECT_COLUMN
 	},
-	/* OCLASS_PROC */
 	{
 		"aggregate", OBJECT_AGGREGATE
 	},
@@ -714,162 +712,123 @@ static const struct object_type_map
 	{
 		"procedure", OBJECT_PROCEDURE
 	},
-	/* OCLASS_TYPE */
 	{
 		"type", OBJECT_TYPE
 	},
-	/* OCLASS_CAST */
 	{
 		"cast", OBJECT_CAST
 	},
-	/* OCLASS_COLLATION */
 	{
 		"collation", OBJECT_COLLATION
 	},
-	/* OCLASS_CONSTRAINT */
 	{
 		"table constraint", OBJECT_TABCONSTRAINT
 	},
 	{
 		"domain constraint", OBJECT_DOMCONSTRAINT
 	},
-	/* OCLASS_CONVERSION */
 	{
 		"conversion", OBJECT_CONVERSION
 	},
-	/* OCLASS_DEFAULT */
 	{
 		"default value", OBJECT_DEFAULT
 	},
-	/* OCLASS_LANGUAGE */
 	{
 		"language", OBJECT_LANGUAGE
 	},
-	/* OCLASS_LARGEOBJECT */
 	{
 		"large object", OBJECT_LARGEOBJECT
 	},
-	/* OCLASS_OPERATOR */
 	{
 		"operator", OBJECT_OPERATOR
 	},
-	/* OCLASS_OPCLASS */
 	{
 		"operator class", OBJECT_OPCLASS
 	},
-	/* OCLASS_OPFAMILY */
 	{
 		"operator family", OBJECT_OPFAMILY
 	},
-	/* OCLASS_AM */
 	{
 		"access method", OBJECT_ACCESS_METHOD
 	},
-	/* OCLASS_AMOP */
 	{
 		"operator of access method", OBJECT_AMOP
 	},
-	/* OCLASS_AMPROC */
 	{
 		"function of access method", OBJECT_AMPROC
 	},
-	/* OCLASS_REWRITE */
 	{
 		"rule", OBJECT_RULE
 	},
-	/* OCLASS_TRIGGER */
 	{
 		"trigger", OBJECT_TRIGGER
 	},
-	/* OCLASS_SCHEMA */
 	{
 		"schema", OBJECT_SCHEMA
 	},
-	/* OCLASS_TSPARSER */
 	{
 		"text search parser", OBJECT_TSPARSER
 	},
-	/* OCLASS_TSDICT */
 	{
 		"text search dictionary", OBJECT_TSDICTIONARY
 	},
-	/* OCLASS_TSTEMPLATE */
 	{
 		"text search template", OBJECT_TSTEMPLATE
 	},
-	/* OCLASS_TSCONFIG */
 	{
 		"text search configuration", OBJECT_TSCONFIGURATION
 	},
-	/* OCLASS_ROLE */
 	{
 		"role", OBJECT_ROLE
 	},
-	/* OCLASS_ROLE_MEMBERSHIP */
 	{
 		"role membership", -1	/* unmapped */
 	},
-	/* OCLASS_DATABASE */
 	{
 		"database", OBJECT_DATABASE
 	},
-	/* OCLASS_TBLSPACE */
 	{
 		"tablespace", OBJECT_TABLESPACE
 	},
-	/* OCLASS_FDW */
 	{
 		"foreign-data wrapper", OBJECT_FDW
 	},
-	/* OCLASS_FOREIGN_SERVER */
 	{
 		"server", OBJECT_FOREIGN_SERVER
 	},
-	/* OCLASS_USER_MAPPING */
 	{
 		"user mapping", OBJECT_USER_MAPPING
 	},
-	/* OCLASS_DEFACL */
 	{
 		"default acl", OBJECT_DEFACL
 	},
-	/* OCLASS_EXTENSION */
 	{
 		"extension", OBJECT_EXTENSION
 	},
-	/* OCLASS_EVENT_TRIGGER */
 	{
 		"event trigger", OBJECT_EVENT_TRIGGER
 	},
-	/* OCLASS_PARAMETER_ACL */
 	{
 		"parameter ACL", OBJECT_PARAMETER_ACL
 	},
-	/* OCLASS_POLICY */
 	{
 		"policy", OBJECT_POLICY
 	},
-	/* OCLASS_PUBLICATION */
 	{
 		"publication", OBJECT_PUBLICATION
 	},
-	/* OCLASS_PUBLICATION_NAMESPACE */
 	{
 		"publication namespace", OBJECT_PUBLICATION_NAMESPACE
 	},
-	/* OCLASS_PUBLICATION_REL */
 	{
 		"publication relation", OBJECT_PUBLICATION_REL
 	},
-	/* OCLASS_SUBSCRIPTION */
 	{
 		"subscription", OBJECT_SUBSCRIPTION
 	},
-	/* OCLASS_TRANSFORM */
 	{
 		"transform", OBJECT_TRANSFORM
 	},
-	/* OCLASS_STATISTIC_EXT */
 	{
 		"statistics object", OBJECT_STATISTIC_EXT
 	}
@@ -2922,9 +2881,9 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 
 	initStringInfo(&buffer);
 
-	switch (getObjectClass(object))
+	switch (object->classId)
 	{
-		case OCLASS_CLASS:
+		case RelationRelationId:
 			if (object->objectSubId == 0)
 				getRelationDescription(&buffer, object->objectId, missing_ok);
 			else
@@ -2947,7 +2906,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 			}
 			break;
 
-		case OCLASS_PROC:
+		case ProcedureRelationId:
 			{
 				bits16		flags = FORMAT_PROC_INVALID_AS_NULL;
 				char	   *proname = format_procedure_extended(object->objectId,
@@ -2960,7 +2919,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_TYPE:
+		case TypeRelationId:
 			{
 				bits16		flags = FORMAT_TYPE_INVALID_AS_NULL;
 				char	   *typname = format_type_extended(object->objectId, -1,
@@ -2973,7 +2932,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_CAST:
+		case CastRelationId:
 			{
 				Relation	castDesc;
 				ScanKeyData skey[1];
@@ -3015,7 +2974,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_COLLATION:
+		case CollationRelationId:
 			{
 				HeapTuple	collTup;
 				Form_pg_collation coll;
@@ -3046,7 +3005,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_CONSTRAINT:
+		case ConstraintRelationId:
 			{
 				HeapTuple	conTup;
 				Form_pg_constraint con;
@@ -3084,7 +3043,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_CONVERSION:
+		case ConversionRelationId:
 			{
 				HeapTuple	conTup;
 				Form_pg_conversion conv;
@@ -3115,7 +3074,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_DEFAULT:
+		case AttrDefaultRelationId:
 			{
 				ObjectAddress colobject;
 
@@ -3135,7 +3094,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_LANGUAGE:
+		case LanguageRelationId:
 			{
 				char	   *langname = get_language_name(object->objectId,
 														 missing_ok);
@@ -3146,14 +3105,14 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_LARGEOBJECT:
+		case LargeObjectRelationId:
 			if (!LargeObjectExists(object->objectId))
 				break;
 			appendStringInfo(&buffer, _("large object %u"),
 							 object->objectId);
 			break;
 
-		case OCLASS_OPERATOR:
+		case OperatorRelationId:
 			{
 				bits16		flags = FORMAT_OPERATOR_INVALID_AS_NULL;
 				char	   *oprname = format_operator_extended(object->objectId,
@@ -3166,7 +3125,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_OPCLASS:
+		case OperatorClassRelationId:
 			{
 				HeapTuple	opcTup;
 				Form_pg_opclass opcForm;
@@ -3209,11 +3168,11 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_OPFAMILY:
+		case OperatorFamilyRelationId:
 			getOpFamilyDescription(&buffer, object->objectId, missing_ok);
 			break;
 
-		case OCLASS_AM:
+		case AccessMethodRelationId:
 			{
 				HeapTuple	tup;
 
@@ -3233,7 +3192,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_AMOP:
+		case AccessMethodOperatorRelationId:
 			{
 				Relation	amopDesc;
 				HeapTuple	tup;
@@ -3290,7 +3249,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_AMPROC:
+		case AccessMethodProcedureRelationId:
 			{
 				Relation	amprocDesc;
 				ScanKeyData skey[1];
@@ -3347,7 +3306,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_REWRITE:
+		case RewriteRelationId:
 			{
 				Relation	ruleDesc;
 				ScanKeyData skey[1];
@@ -3393,7 +3352,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_TRIGGER:
+		case TriggerRelationId:
 			{
 				Relation	trigDesc;
 				ScanKeyData skey[1];
@@ -3439,7 +3398,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_SCHEMA:
+		case NamespaceRelationId:
 			{
 				char	   *nspname;
 
@@ -3455,7 +3414,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_STATISTIC_EXT:
+		case StatisticExtRelationId:
 			{
 				HeapTuple	stxTup;
 				Form_pg_statistic_ext stxForm;
@@ -3487,7 +3446,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_TSPARSER:
+		case TSParserRelationId:
 			{
 				HeapTuple	tup;
 				Form_pg_ts_parser prsForm;
@@ -3517,7 +3476,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_TSDICT:
+		case TSDictionaryRelationId:
 			{
 				HeapTuple	tup;
 				Form_pg_ts_dict dictForm;
@@ -3548,7 +3507,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_TSTEMPLATE:
+		case TSTemplateRelationId:
 			{
 				HeapTuple	tup;
 				Form_pg_ts_template tmplForm;
@@ -3579,7 +3538,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_TSCONFIG:
+		case TSConfigRelationId:
 			{
 				HeapTuple	tup;
 				Form_pg_ts_config cfgForm;
@@ -3610,7 +3569,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_ROLE:
+		case AuthIdRelationId:
 			{
 				char	   *username = GetUserNameFromId(object->objectId,
 														 missing_ok);
@@ -3620,7 +3579,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_ROLE_MEMBERSHIP:
+		case AuthMemRelationId:
 			{
 				Relation	amDesc;
 				ScanKeyData skey[1];
@@ -3662,7 +3621,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_DATABASE:
+		case DatabaseRelationId:
 			{
 				char	   *datname;
 
@@ -3678,7 +3637,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_TBLSPACE:
+		case TableSpaceRelationId:
 			{
 				char	   *tblspace;
 
@@ -3694,7 +3653,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_FDW:
+		case ForeignDataWrapperRelationId:
 			{
 				ForeignDataWrapper *fdw;
 
@@ -3705,7 +3664,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_FOREIGN_SERVER:
+		case ForeignServerRelationId:
 			{
 				ForeignServer *srv;
 
@@ -3715,7 +3674,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_USER_MAPPING:
+		case UserMappingRelationId:
 			{
 				HeapTuple	tup;
 				Oid			useid;
@@ -3749,7 +3708,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_DEFACL:
+		case DefaultAclRelationId:
 			{
 				Relation	defaclrel;
 				ScanKeyData skey[1];
@@ -3857,7 +3816,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_EXTENSION:
+		case ExtensionRelationId:
 			{
 				char	   *extname;
 
@@ -3873,7 +3832,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_EVENT_TRIGGER:
+		case EventTriggerRelationId:
 			{
 				HeapTuple	tup;
 
@@ -3892,7 +3851,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_PARAMETER_ACL:
+		case ParameterAclRelationId:
 			{
 				HeapTuple	tup;
 				Datum		nameDatum;
@@ -3915,7 +3874,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_POLICY:
+		case PolicyRelationId:
 			{
 				Relation	policy_rel;
 				ScanKeyData skey[1];
@@ -3961,7 +3920,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_PUBLICATION:
+		case PublicationRelationId:
 			{
 				char	   *pubname = get_publication_name(object->objectId,
 														   missing_ok);
@@ -3971,7 +3930,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_PUBLICATION_NAMESPACE:
+		case PublicationNamespaceRelationId:
 			{
 				char	   *pubname;
 				char	   *nspname;
@@ -3987,7 +3946,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_PUBLICATION_REL:
+		case PublicationRelRelationId:
 			{
 				HeapTuple	tup;
 				char	   *pubname;
@@ -4018,7 +3977,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_SUBSCRIPTION:
+		case SubscriptionRelationId:
 			{
 				char	   *subname = get_subscription_name(object->objectId,
 															missing_ok);
@@ -4028,7 +3987,7 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-		case OCLASS_TRANSFORM:
+		case TransformRelationId:
 			{
 				HeapTuple	trfTup;
 				Form_pg_transform trfForm;
@@ -4053,10 +4012,8 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
 				break;
 			}
 
-			/*
-			 * There's intentionally no default: case here; we want the
-			 * compiler to warn if a new OCLASS hasn't been handled above.
-			 */
+		default:
+			elog(ERROR, "unsupported object class: %u", object->classId);
 	}
 
 	/* an empty buffer is equivalent to no object found */
@@ -4418,180 +4375,178 @@ getObjectTypeDescription(const ObjectAddress *object, bool missing_ok)
 
 	initStringInfo(&buffer);
 
-	switch (getObjectClass(object))
+	switch (object->classId)
 	{
-		case OCLASS_CLASS:
+		case RelationRelationId:
 			getRelationTypeDescription(&buffer, object->objectId,
 									   object->objectSubId,
 									   missing_ok);
 			break;
 
-		case OCLASS_PROC:
+		case ProcedureRelationId:
 			getProcedureTypeDescription(&buffer, object->objectId,
 										missing_ok);
 			break;
 
-		case OCLASS_TYPE:
+		case TypeRelationId:
 			appendStringInfoString(&buffer, "type");
 			break;
 
-		case OCLASS_CAST:
+		case CastRelationId:
 			appendStringInfoString(&buffer, "cast");
 			break;
 
-		case OCLASS_COLLATION:
+		case CollationRelationId:
 			appendStringInfoString(&buffer, "collation");
 			break;
 
-		case OCLASS_CONSTRAINT:
+		case ConstraintRelationId:
 			getConstraintTypeDescription(&buffer, object->objectId,
 										 missing_ok);
 			break;
 
-		case OCLASS_CONVERSION:
+		case ConversionRelationId:
 			appendStringInfoString(&buffer, "conversion");
 			break;
 
-		case OCLASS_DEFAULT:
+		case AttrDefaultRelationId:
 			appendStringInfoString(&buffer, "default value");
 			break;
 
-		case OCLASS_LANGUAGE:
+		case LanguageRelationId:
 			appendStringInfoString(&buffer, "language");
 			break;
 
-		case OCLASS_LARGEOBJECT:
+		case LargeObjectRelationId:
 			appendStringInfoString(&buffer, "large object");
 			break;
 
-		case OCLASS_OPERATOR:
+		case OperatorRelationId:
 			appendStringInfoString(&buffer, "operator");
 			break;
 
-		case OCLASS_OPCLASS:
+		case OperatorClassRelationId:
 			appendStringInfoString(&buffer, "operator class");
 			break;
 
-		case OCLASS_OPFAMILY:
+		case OperatorFamilyRelationId:
 			appendStringInfoString(&buffer, "operator family");
 			break;
 
-		case OCLASS_AM:
+		case AccessMethodRelationId:
 			appendStringInfoString(&buffer, "access method");
 			break;
 
-		case OCLASS_AMOP:
+		case AccessMethodOperatorRelationId:
 			appendStringInfoString(&buffer, "operator of access method");
 			break;
 
-		case OCLASS_AMPROC:
+		case AccessMethodProcedureRelationId:
 			appendStringInfoString(&buffer, "function of access method");
 			break;
 
-		case OCLASS_REWRITE:
+		case RewriteRelationId:
 			appendStringInfoString(&buffer, "rule");
 			break;
 
-		case OCLASS_TRIGGER:
+		case TriggerRelationId:
 			appendStringInfoString(&buffer, "trigger");
 			break;
 
-		case OCLASS_SCHEMA:
+		case NamespaceRelationId:
 			appendStringInfoString(&buffer, "schema");
 			break;
 
-		case OCLASS_STATISTIC_EXT:
+		case StatisticExtRelationId:
 			appendStringInfoString(&buffer, "statistics object");
 			break;
 
-		case OCLASS_TSPARSER:
+		case TSParserRelationId:
 			appendStringInfoString(&buffer, "text search parser");
 			break;
 
-		case OCLASS_TSDICT:
+		case TSDictionaryRelationId:
 			appendStringInfoString(&buffer, "text search dictionary");
 			break;
 
-		case OCLASS_TSTEMPLATE:
+		case TSTemplateRelationId:
 			appendStringInfoString(&buffer, "text search template");
 			break;
 
-		case OCLASS_TSCONFIG:
+		case TSConfigRelationId:
 			appendStringInfoString(&buffer, "text search configuration");
 			break;
 
-		case OCLASS_ROLE:
+		case AuthIdRelationId:
 			appendStringInfoString(&buffer, "role");
 			break;
 
-		case OCLASS_ROLE_MEMBERSHIP:
+		case AuthMemRelationId:
 			appendStringInfoString(&buffer, "role membership");
 			break;
 
-		case OCLASS_DATABASE:
+		case DatabaseRelationId:
 			appendStringInfoString(&buffer, "database");
 			break;
 
-		case OCLASS_TBLSPACE:
+		case TableSpaceRelationId:
 			appendStringInfoString(&buffer, "tablespace");
 			break;
 
-		case OCLASS_FDW:
+		case ForeignDataWrapperRelationId:
 			appendStringInfoString(&buffer, "foreign-data wrapper");
 			break;
 
-		case OCLASS_FOREIGN_SERVER:
+		case ForeignServerRelationId:
 			appendStringInfoString(&buffer, "server");
 			break;
 
-		case OCLASS_USER_MAPPING:
+		case UserMappingRelationId:
 			appendStringInfoString(&buffer, "user mapping");
 			break;
 
-		case OCLASS_DEFACL:
+		case DefaultAclRelationId:
 			appendStringInfoString(&buffer, "default acl");
 			break;
 
-		case OCLASS_EXTENSION:
+		case ExtensionRelationId:
 			appendStringInfoString(&buffer, "extension");
 			break;
 
-		case OCLASS_EVENT_TRIGGER:
+		case EventTriggerRelationId:
 			appendStringInfoString(&buffer, "event trigger");
 			break;
 
-		case OCLASS_PARAMETER_ACL:
+		case ParameterAclRelationId:
 			appendStringInfoString(&buffer, "parameter ACL");
 			break;
 
-		case OCLASS_POLICY:
+		case PolicyRelationId:
 			appendStringInfoString(&buffer, "policy");
 			break;
 
-		case OCLASS_PUBLICATION:
+		case PublicationRelationId:
 			appendStringInfoString(&buffer, "publication");
 			break;
 
-		case OCLASS_PUBLICATION_NAMESPACE:
+		case PublicationNamespaceRelationId:
 			appendStringInfoString(&buffer, "publication namespace");
 			break;
 
-		case OCLASS_PUBLICATION_REL:
+		case PublicationRelRelationId:
 			appendStringInfoString(&buffer, "publication relation");
 			break;
 
-		case OCLASS_SUBSCRIPTION:
+		case SubscriptionRelationId:
 			appendStringInfoString(&buffer, "subscription");
 			break;
 
-		case OCLASS_TRANSFORM:
+		case TransformRelationId:
 			appendStringInfoString(&buffer, "transform");
 			break;
 
-			/*
-			 * There's intentionally no default: case here; we want the
-			 * compiler to warn if a new OCLASS hasn't been handled above.
-			 */
+		default:
+			elog(ERROR, "unsupported object class: %u", object->classId);
 	}
 
 	/* the result can never be empty */
@@ -4777,9 +4732,9 @@ getObjectIdentityParts(const ObjectAddress *object,
 		*objargs = NIL;
 	}
 
-	switch (getObjectClass(object))
+	switch (object->classId)
 	{
-		case OCLASS_CLASS:
+		case RelationRelationId:
 			{
 				char	   *attr = NULL;
 
@@ -4812,7 +4767,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 			}
 			break;
 
-		case OCLASS_PROC:
+		case ProcedureRelationId:
 			{
 				bits16		flags = FORMAT_PROC_FORCE_QUALIFY | FORMAT_PROC_INVALID_AS_NULL;
 				char	   *proname = format_procedure_extended(object->objectId,
@@ -4828,7 +4783,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_TYPE:
+		case TypeRelationId:
 			{
 				bits16		flags = FORMAT_TYPE_INVALID_AS_NULL | FORMAT_TYPE_FORCE_QUALIFY;
 				char	   *typeout;
@@ -4844,7 +4799,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 			}
 			break;
 
-		case OCLASS_CAST:
+		case CastRelationId:
 			{
 				Relation	castRel;
 				HeapTuple	tup;
@@ -4881,7 +4836,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_COLLATION:
+		case CollationRelationId:
 			{
 				HeapTuple	collTup;
 				Form_pg_collation coll;
@@ -4908,7 +4863,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_CONSTRAINT:
+		case ConstraintRelationId:
 			{
 				HeapTuple	conTup;
 				Form_pg_constraint con;
@@ -4955,7 +4910,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_CONVERSION:
+		case ConversionRelationId:
 			{
 				HeapTuple	conTup;
 				Form_pg_conversion conForm;
@@ -4982,7 +4937,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_DEFAULT:
+		case AttrDefaultRelationId:
 			{
 				ObjectAddress colobject;
 
@@ -5003,7 +4958,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_LANGUAGE:
+		case LanguageRelationId:
 			{
 				HeapTuple	langTup;
 				Form_pg_language langForm;
@@ -5025,7 +4980,8 @@ getObjectIdentityParts(const ObjectAddress *object,
 				ReleaseSysCache(langTup);
 				break;
 			}
-		case OCLASS_LARGEOBJECT:
+
+		case LargeObjectRelationId:
 			if (!LargeObjectExists(object->objectId))
 				break;
 			appendStringInfo(&buffer, "%u",
@@ -5034,7 +4990,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				*objname = list_make1(psprintf("%u", object->objectId));
 			break;
 
-		case OCLASS_OPERATOR:
+		case OperatorRelationId:
 			{
 				bits16		flags = FORMAT_OPERATOR_FORCE_QUALIFY | FORMAT_OPERATOR_INVALID_AS_NULL;
 				char	   *oprname = format_operator_extended(object->objectId,
@@ -5049,7 +5005,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_OPCLASS:
+		case OperatorClassRelationId:
 			{
 				HeapTuple	opcTup;
 				Form_pg_opclass opcForm;
@@ -5090,12 +5046,12 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_OPFAMILY:
+		case OperatorFamilyRelationId:
 			getOpFamilyIdentity(&buffer, object->objectId, objname,
 								missing_ok);
 			break;
 
-		case OCLASS_AM:
+		case AccessMethodRelationId:
 			{
 				char	   *amname;
 
@@ -5113,7 +5069,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 			}
 			break;
 
-		case OCLASS_AMOP:
+		case AccessMethodOperatorRelationId:
 			{
 				Relation	amopDesc;
 				HeapTuple	tup;
@@ -5175,7 +5131,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_AMPROC:
+		case AccessMethodProcedureRelationId:
 			{
 				Relation	amprocDesc;
 				ScanKeyData skey[1];
@@ -5237,7 +5193,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_REWRITE:
+		case RewriteRelationId:
 			{
 				Relation	ruleDesc;
 				HeapTuple	tup;
@@ -5270,7 +5226,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_TRIGGER:
+		case TriggerRelationId:
 			{
 				Relation	trigDesc;
 				HeapTuple	tup;
@@ -5303,7 +5259,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_SCHEMA:
+		case NamespaceRelationId:
 			{
 				char	   *nspname;
 
@@ -5322,7 +5278,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_STATISTIC_EXT:
+		case StatisticExtRelationId:
 			{
 				HeapTuple	tup;
 				Form_pg_statistic_ext formStatistic;
@@ -5349,7 +5305,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 			}
 			break;
 
-		case OCLASS_TSPARSER:
+		case TSParserRelationId:
 			{
 				HeapTuple	tup;
 				Form_pg_ts_parser formParser;
@@ -5376,7 +5332,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_TSDICT:
+		case TSDictionaryRelationId:
 			{
 				HeapTuple	tup;
 				Form_pg_ts_dict formDict;
@@ -5403,7 +5359,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_TSTEMPLATE:
+		case TSTemplateRelationId:
 			{
 				HeapTuple	tup;
 				Form_pg_ts_template formTmpl;
@@ -5430,7 +5386,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_TSCONFIG:
+		case TSConfigRelationId:
 			{
 				HeapTuple	tup;
 				Form_pg_ts_config formCfg;
@@ -5457,7 +5413,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_ROLE:
+		case AuthIdRelationId:
 			{
 				char	   *username;
 
@@ -5471,7 +5427,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_ROLE_MEMBERSHIP:
+		case AuthMemRelationId:
 			{
 				Relation	authMemDesc;
 				ScanKeyData skey[1];
@@ -5514,7 +5470,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_DATABASE:
+		case DatabaseRelationId:
 			{
 				char	   *datname;
 
@@ -5533,7 +5489,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_TBLSPACE:
+		case TableSpaceRelationId:
 			{
 				char	   *tblspace;
 
@@ -5552,7 +5508,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_FDW:
+		case ForeignDataWrapperRelationId:
 			{
 				ForeignDataWrapper *fdw;
 
@@ -5567,7 +5523,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_FOREIGN_SERVER:
+		case ForeignServerRelationId:
 			{
 				ForeignServer *srv;
 
@@ -5583,7 +5539,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_USER_MAPPING:
+		case UserMappingRelationId:
 			{
 				HeapTuple	tup;
 				Oid			useid;
@@ -5623,7 +5579,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_DEFACL:
+		case DefaultAclRelationId:
 			{
 				Relation	defaclrel;
 				ScanKeyData skey[1];
@@ -5710,7 +5666,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_EXTENSION:
+		case ExtensionRelationId:
 			{
 				char	   *extname;
 
@@ -5728,7 +5684,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_EVENT_TRIGGER:
+		case EventTriggerRelationId:
 			{
 				HeapTuple	tup;
 				Form_pg_event_trigger trigForm;
@@ -5752,7 +5708,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_PARAMETER_ACL:
+		case ParameterAclRelationId:
 			{
 				HeapTuple	tup;
 				Datum		nameDatum;
@@ -5777,7 +5733,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_POLICY:
+		case PolicyRelationId:
 			{
 				Relation	polDesc;
 				HeapTuple	tup;
@@ -5810,7 +5766,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_PUBLICATION:
+		case PublicationRelationId:
 			{
 				char	   *pubname;
 
@@ -5825,7 +5781,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_PUBLICATION_NAMESPACE:
+		case PublicationNamespaceRelationId:
 			{
 				char	   *pubname;
 				char	   *nspname;
@@ -5849,7 +5805,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_PUBLICATION_REL:
+		case PublicationRelRelationId:
 			{
 				HeapTuple	tup;
 				char	   *pubname;
@@ -5878,7 +5834,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_SUBSCRIPTION:
+		case SubscriptionRelationId:
 			{
 				char	   *subname;
 
@@ -5893,7 +5849,7 @@ getObjectIdentityParts(const ObjectAddress *object,
 				break;
 			}
 
-		case OCLASS_TRANSFORM:
+		case TransformRelationId:
 			{
 				Relation	transformDesc;
 				HeapTuple	tup;
@@ -5935,10 +5891,8 @@ getObjectIdentityParts(const ObjectAddress *object,
 			}
 			break;
 
-			/*
-			 * There's intentionally no default: case here; we want the
-			 * compiler to warn if a new OCLASS hasn't been handled above.
-			 */
+		default:
+			elog(ERROR, "unsupported object class: %u", object->classId);
 	}
 
 	if (!missing_ok)
@@ -5949,8 +5903,8 @@ getObjectIdentityParts(const ObjectAddress *object,
 		 * cases above leave it as NIL.
 		 */
 		if (objname && *objname == NIL)
-			elog(ERROR, "requested object address for unsupported object class %d: text result \"%s\"",
-				 (int) getObjectClass(object), buffer.data);
+			elog(ERROR, "requested object address for unsupported object class %u: text result \"%s\"",
+				 object->classId, buffer.data);
 	}
 	else
 	{
diff --git a/src/backend/commands/alter.c b/src/backend/commands/alter.c
index cd740140fd..12802b9d3f 100644
--- a/src/backend/commands/alter.c
+++ b/src/backend/commands/alter.c
@@ -32,6 +32,7 @@
 #include "catalog/pg_largeobject_metadata.h"
 #include "catalog/pg_namespace.h"
 #include "catalog/pg_opclass.h"
+#include "catalog/pg_operator.h"
 #include "catalog/pg_opfamily.h"
 #include "catalog/pg_proc.h"
 #include "catalog/pg_statistic_ext.h"
@@ -603,8 +604,7 @@ ExecAlterObjectSchemaStmt(AlterObjectSchemaStmt *stmt,
  * so it only needs to cover object types that can be members of an
  * extension, and it doesn't have to deal with certain special cases
  * such as not wanting to process array types --- those should never
- * be direct members of an extension anyway.  Nonetheless, we insist
- * on listing all OCLASS types in the switch.
+ * be direct members of an extension anyway.
  *
  * Returns the OID of the object's previous namespace, or InvalidOid if
  * object doesn't have a schema.
@@ -614,15 +614,10 @@ AlterObjectNamespace_oid(Oid classId, Oid objid, Oid nspOid,
 						 ObjectAddresses *objsMoved)
 {
 	Oid			oldNspOid = InvalidOid;
-	ObjectAddress dep;
 
-	dep.classId = classId;
-	dep.objectId = objid;
-	dep.objectSubId = 0;
-
-	switch (getObjectClass(&dep))
+	switch (classId)
 	{
-		case OCLASS_CLASS:
+		case RelationRelationId:
 			{
 				Relation	rel;
 
@@ -635,21 +630,21 @@ AlterObjectNamespace_oid(Oid classId, Oid objid, Oid nspOid,
 				break;
 			}
 
-		case OCLASS_TYPE:
+		case TypeRelationId:
 			oldNspOid = AlterTypeNamespace_oid(objid, nspOid, objsMoved);
 			break;
 
-		case OCLASS_PROC:
-		case OCLASS_COLLATION:
-		case OCLASS_CONVERSION:
-		case OCLASS_OPERATOR:
-		case OCLASS_OPCLASS:
-		case OCLASS_OPFAMILY:
-		case OCLASS_STATISTIC_EXT:
-		case OCLASS_TSPARSER:
-		case OCLASS_TSDICT:
-		case OCLASS_TSTEMPLATE:
-		case OCLASS_TSCONFIG:
+		case ProcedureRelationId:
+		case CollationRelationId:
+		case ConversionRelationId:
+		case OperatorRelationId:
+		case OperatorClassRelationId:
+		case OperatorFamilyRelationId:
+		case StatisticExtRelationId:
+		case TSParserRelationId:
+		case TSDictionaryRelationId:
+		case TSTemplateRelationId:
+		case TSConfigRelationId:
 			{
 				Relation	catalog;
 
@@ -662,41 +657,9 @@ AlterObjectNamespace_oid(Oid classId, Oid objid, Oid nspOid,
 			}
 			break;
 
-		case OCLASS_CAST:
-		case OCLASS_CONSTRAINT:
-		case OCLASS_DEFAULT:
-		case OCLASS_LANGUAGE:
-		case OCLASS_LARGEOBJECT:
-		case OCLASS_AM:
-		case OCLASS_AMOP:
-		case OCLASS_AMPROC:
-		case OCLASS_REWRITE:
-		case OCLASS_TRIGGER:
-		case OCLASS_SCHEMA:
-		case OCLASS_ROLE:
-		case OCLASS_ROLE_MEMBERSHIP:
-		case OCLASS_DATABASE:
-		case OCLASS_TBLSPACE:
-		case OCLASS_FDW:
-		case OCLASS_FOREIGN_SERVER:
-		case OCLASS_USER_MAPPING:
-		case OCLASS_DEFACL:
-		case OCLASS_EXTENSION:
-		case OCLASS_EVENT_TRIGGER:
-		case OCLASS_PARAMETER_ACL:
-		case OCLASS_POLICY:
-		case OCLASS_PUBLICATION:
-		case OCLASS_PUBLICATION_NAMESPACE:
-		case OCLASS_PUBLICATION_REL:
-		case OCLASS_SUBSCRIPTION:
-		case OCLASS_TRANSFORM:
+		default:
 			/* ignore object types that don't have schema-qualified names */
-			break;
-
-			/*
-			 * There's intentionally no default: case here; we want the
-			 * compiler to warn if a new OCLASS hasn't been handled above.
-			 */
+			Assert(get_object_attnum_namespace(classId) == InvalidAttrNumber);
 	}
 
 	return oldNspOid;
diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c
index c95e9cf6f0..0d3214df9c 100644
--- a/src/backend/commands/event_trigger.c
+++ b/src/backend/commands/event_trigger.c
@@ -21,12 +21,16 @@
 #include "catalog/dependency.h"
 #include "catalog/indexing.h"
 #include "catalog/objectaccess.h"
+#include "catalog/pg_authid.h"
+#include "catalog/pg_auth_members.h"
 #include "catalog/pg_database.h"
 #include "catalog/pg_event_trigger.h"
 #include "catalog/pg_namespace.h"
 #include "catalog/pg_opclass.h"
 #include "catalog/pg_opfamily.h"
+#include "catalog/pg_parameter_acl.h"
 #include "catalog/pg_proc.h"
+#include "catalog/pg_tablespace.h"
 #include "catalog/pg_trigger.h"
 #include "catalog/pg_ts_config.h"
 #include "catalog/pg_type.h"
@@ -1125,6 +1129,8 @@ EventTriggerInvoke(List *fn_oid_list, EventTriggerData *trigdata)
 
 /*
  * Do event triggers support this object type?
+ *
+ * See also event trigger support matrix in event-trigger.sgml.
  */
 bool
 EventTriggerSupportsObjectType(ObjectType obtype)
@@ -1135,133 +1141,39 @@ EventTriggerSupportsObjectType(ObjectType obtype)
 		case OBJECT_TABLESPACE:
 		case OBJECT_ROLE:
 		case OBJECT_PARAMETER_ACL:
-			/* no support for global objects */
+			/* no support for global objects (except subscriptions) */
 			return false;
 		case OBJECT_EVENT_TRIGGER:
 			/* no support for event triggers on event triggers */
 			return false;
-		case OBJECT_ACCESS_METHOD:
-		case OBJECT_AGGREGATE:
-		case OBJECT_AMOP:
-		case OBJECT_AMPROC:
-		case OBJECT_ATTRIBUTE:
-		case OBJECT_CAST:
-		case OBJECT_COLUMN:
-		case OBJECT_COLLATION:
-		case OBJECT_CONVERSION:
-		case OBJECT_DEFACL:
-		case OBJECT_DEFAULT:
-		case OBJECT_DOMAIN:
-		case OBJECT_DOMCONSTRAINT:
-		case OBJECT_EXTENSION:
-		case OBJECT_FDW:
-		case OBJECT_FOREIGN_SERVER:
-		case OBJECT_FOREIGN_TABLE:
-		case OBJECT_FUNCTION:
-		case OBJECT_INDEX:
-		case OBJECT_LANGUAGE:
-		case OBJECT_LARGEOBJECT:
-		case OBJECT_MATVIEW:
-		case OBJECT_OPCLASS:
-		case OBJECT_OPERATOR:
-		case OBJECT_OPFAMILY:
-		case OBJECT_POLICY:
-		case OBJECT_PROCEDURE:
-		case OBJECT_PUBLICATION:
-		case OBJECT_PUBLICATION_NAMESPACE:
-		case OBJECT_PUBLICATION_REL:
-		case OBJECT_ROUTINE:
-		case OBJECT_RULE:
-		case OBJECT_SCHEMA:
-		case OBJECT_SEQUENCE:
-		case OBJECT_SUBSCRIPTION:
-		case OBJECT_STATISTIC_EXT:
-		case OBJECT_TABCONSTRAINT:
-		case OBJECT_TABLE:
-		case OBJECT_TRANSFORM:
-		case OBJECT_TRIGGER:
-		case OBJECT_TSCONFIGURATION:
-		case OBJECT_TSDICTIONARY:
-		case OBJECT_TSPARSER:
-		case OBJECT_TSTEMPLATE:
-		case OBJECT_TYPE:
-		case OBJECT_USER_MAPPING:
-		case OBJECT_VIEW:
+		default:
 			return true;
-
-			/*
-			 * There's intentionally no default: case here; we want the
-			 * compiler to warn if a new ObjectType hasn't been handled above.
-			 */
 	}
-
-	/* Shouldn't get here, but if we do, say "no support" */
-	return false;
 }
 
 /*
  * Do event triggers support this object class?
+ *
+ * See also event trigger support matrix in event-trigger.sgml.
  */
 bool
-EventTriggerSupportsObjectClass(ObjectClass objclass)
+EventTriggerSupportsObject(const ObjectAddress *object)
 {
-	switch (objclass)
+	switch (object->classId)
 	{
-		case OCLASS_DATABASE:
-		case OCLASS_TBLSPACE:
-		case OCLASS_ROLE:
-		case OCLASS_ROLE_MEMBERSHIP:
-		case OCLASS_PARAMETER_ACL:
-			/* no support for global objects */
+		case DatabaseRelationId:
+		case TableSpaceRelationId:
+		case AuthIdRelationId:
+		case AuthMemRelationId:
+		case ParameterAclRelationId:
+			/* no support for global objects (except subscriptions) */
 			return false;
-		case OCLASS_EVENT_TRIGGER:
+		case EventTriggerRelationId:
 			/* no support for event triggers on event triggers */
 			return false;
-		case OCLASS_CLASS:
-		case OCLASS_PROC:
-		case OCLASS_TYPE:
-		case OCLASS_CAST:
-		case OCLASS_COLLATION:
-		case OCLASS_CONSTRAINT:
-		case OCLASS_CONVERSION:
-		case OCLASS_DEFAULT:
-		case OCLASS_LANGUAGE:
-		case OCLASS_LARGEOBJECT:
-		case OCLASS_OPERATOR:
-		case OCLASS_OPCLASS:
-		case OCLASS_OPFAMILY:
-		case OCLASS_AM:
-		case OCLASS_AMOP:
-		case OCLASS_AMPROC:
-		case OCLASS_REWRITE:
-		case OCLASS_TRIGGER:
-		case OCLASS_SCHEMA:
-		case OCLASS_STATISTIC_EXT:
-		case OCLASS_TSPARSER:
-		case OCLASS_TSDICT:
-		case OCLASS_TSTEMPLATE:
-		case OCLASS_TSCONFIG:
-		case OCLASS_FDW:
-		case OCLASS_FOREIGN_SERVER:
-		case OCLASS_USER_MAPPING:
-		case OCLASS_DEFACL:
-		case OCLASS_EXTENSION:
-		case OCLASS_POLICY:
-		case OCLASS_PUBLICATION:
-		case OCLASS_PUBLICATION_NAMESPACE:
-		case OCLASS_PUBLICATION_REL:
-		case OCLASS_SUBSCRIPTION:
-		case OCLASS_TRANSFORM:
+		default:
 			return true;
-
-			/*
-			 * There's intentionally no default: case here; we want the
-			 * compiler to warn if a new OCLASS hasn't been handled above.
-			 */
 	}
-
-	/* Shouldn't get here, but if we do, say "no support" */
-	return false;
 }
 
 /*
@@ -1373,7 +1285,7 @@ EventTriggerSQLDropAddObject(const ObjectAddress *object, bool original, bool no
 	if (!currentEventTriggerState)
 		return;
 
-	Assert(EventTriggerSupportsObjectClass(getObjectClass(object)));
+	Assert(EventTriggerSupportsObject(object));
 
 	/* don't report temp schemas except my own */
 	if (object->classId == NamespaceRelationId &&
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 259b4237a2..635d54645d 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -44,6 +44,8 @@
 #include "catalog/pg_largeobject.h"
 #include "catalog/pg_namespace.h"
 #include "catalog/pg_opclass.h"
+#include "catalog/pg_policy.h"
+#include "catalog/pg_rewrite.h"
 #include "catalog/pg_statistic_ext.h"
 #include "catalog/pg_tablespace.h"
 #include "catalog/pg_trigger.h"
@@ -13977,9 +13979,9 @@ RememberAllDependentForRebuilding(AlteredTableInfo *tab, AlterTableType subtype,
 		foundObject.objectId = foundDep->objid;
 		foundObject.objectSubId = foundDep->objsubid;
 
-		switch (getObjectClass(&foundObject))
+		switch (foundObject.classId)
 		{
-			case OCLASS_CLASS:
+			case RelationRelationId:
 				{
 					char		relKind = get_rel_relkind(foundObject.objectId);
 
@@ -14006,12 +14008,12 @@ RememberAllDependentForRebuilding(AlteredTableInfo *tab, AlterTableType subtype,
 					break;
 				}
 
-			case OCLASS_CONSTRAINT:
+			case ConstraintRelationId:
 				Assert(foundObject.objectSubId == 0);
 				RememberConstraintForRebuilding(foundObject.objectId, tab);
 				break;
 
-			case OCLASS_REWRITE:
+			case RewriteRelationId:
 				/* XXX someday see if we can cope with revising views */
 				if (subtype == AT_AlterColumnType)
 					ereport(ERROR,
@@ -14022,7 +14024,7 @@ RememberAllDependentForRebuilding(AlteredTableInfo *tab, AlterTableType subtype,
 									   colName)));
 				break;
 
-			case OCLASS_TRIGGER:
+			case TriggerRelationId:
 
 				/*
 				 * A trigger can depend on a column because the column is
@@ -14042,7 +14044,7 @@ RememberAllDependentForRebuilding(AlteredTableInfo *tab, AlterTableType subtype,
 									   colName)));
 				break;
 
-			case OCLASS_POLICY:
+			case PolicyRelationId:
 
 				/*
 				 * A policy can depend on a column because the column is
@@ -14061,7 +14063,7 @@ RememberAllDependentForRebuilding(AlteredTableInfo *tab, AlterTableType subtype,
 									   colName)));
 				break;
 
-			case OCLASS_DEFAULT:
+			case AttrDefaultRelationId:
 				{
 					ObjectAddress col = GetAttrDefaultColumnAddress(foundObject.objectId);
 
@@ -14096,7 +14098,7 @@ RememberAllDependentForRebuilding(AlteredTableInfo *tab, AlterTableType subtype,
 					break;
 				}
 
-			case OCLASS_STATISTIC_EXT:
+			case StatisticExtRelationId:
 
 				/*
 				 * Give the extended-stats machinery a chance to fix anything
@@ -14105,53 +14107,15 @@ RememberAllDependentForRebuilding(AlteredTableInfo *tab, AlterTableType subtype,
 				RememberStatisticsForRebuilding(foundObject.objectId, tab);
 				break;
 
-			case OCLASS_PROC:
-			case OCLASS_TYPE:
-			case OCLASS_CAST:
-			case OCLASS_COLLATION:
-			case OCLASS_CONVERSION:
-			case OCLASS_LANGUAGE:
-			case OCLASS_LARGEOBJECT:
-			case OCLASS_OPERATOR:
-			case OCLASS_OPCLASS:
-			case OCLASS_OPFAMILY:
-			case OCLASS_AM:
-			case OCLASS_AMOP:
-			case OCLASS_AMPROC:
-			case OCLASS_SCHEMA:
-			case OCLASS_TSPARSER:
-			case OCLASS_TSDICT:
-			case OCLASS_TSTEMPLATE:
-			case OCLASS_TSCONFIG:
-			case OCLASS_ROLE:
-			case OCLASS_ROLE_MEMBERSHIP:
-			case OCLASS_DATABASE:
-			case OCLASS_TBLSPACE:
-			case OCLASS_FDW:
-			case OCLASS_FOREIGN_SERVER:
-			case OCLASS_USER_MAPPING:
-			case OCLASS_DEFACL:
-			case OCLASS_EXTENSION:
-			case OCLASS_EVENT_TRIGGER:
-			case OCLASS_PARAMETER_ACL:
-			case OCLASS_PUBLICATION:
-			case OCLASS_PUBLICATION_NAMESPACE:
-			case OCLASS_PUBLICATION_REL:
-			case OCLASS_SUBSCRIPTION:
-			case OCLASS_TRANSFORM:
+			default:
 
 				/*
-				 * We don't expect any of these sorts of objects to depend on
-				 * a column.
+				 * We don't expect any other sorts of objects to depend on a
+				 * column.
 				 */
 				elog(ERROR, "unexpected object depending on column: %s",
 					 getObjectDescription(&foundObject, false));
 				break;
-
-				/*
-				 * There's intentionally no default: case here; we want the
-				 * compiler to warn if a new OCLASS hasn't been handled above.
-				 */
 		}
 	}
 
diff --git a/src/include/catalog/dependency.h b/src/include/catalog/dependency.h
index 436b081738..ec654010d4 100644
--- a/src/include/catalog/dependency.h
+++ b/src/include/catalog/dependency.h
@@ -81,55 +81,6 @@ typedef enum SharedDependencyType
 /* expansible list of ObjectAddresses (private in dependency.c) */
 typedef struct ObjectAddresses ObjectAddresses;
 
-/*
- * This enum covers all system catalogs whose OIDs can appear in
- * pg_depend.classId or pg_shdepend.classId.
- */
-typedef enum ObjectClass
-{
-	OCLASS_CLASS,				/* pg_class */
-	OCLASS_PROC,				/* pg_proc */
-	OCLASS_TYPE,				/* pg_type */
-	OCLASS_CAST,				/* pg_cast */
-	OCLASS_COLLATION,			/* pg_collation */
-	OCLASS_CONSTRAINT,			/* pg_constraint */
-	OCLASS_CONVERSION,			/* pg_conversion */
-	OCLASS_DEFAULT,				/* pg_attrdef */
-	OCLASS_LANGUAGE,			/* pg_language */
-	OCLASS_LARGEOBJECT,			/* pg_largeobject */
-	OCLASS_OPERATOR,			/* pg_operator */
-	OCLASS_OPCLASS,				/* pg_opclass */
-	OCLASS_OPFAMILY,			/* pg_opfamily */
-	OCLASS_AM,					/* pg_am */
-	OCLASS_AMOP,				/* pg_amop */
-	OCLASS_AMPROC,				/* pg_amproc */
-	OCLASS_REWRITE,				/* pg_rewrite */
-	OCLASS_TRIGGER,				/* pg_trigger */
-	OCLASS_SCHEMA,				/* pg_namespace */
-	OCLASS_STATISTIC_EXT,		/* pg_statistic_ext */
-	OCLASS_TSPARSER,			/* pg_ts_parser */
-	OCLASS_TSDICT,				/* pg_ts_dict */
-	OCLASS_TSTEMPLATE,			/* pg_ts_template */
-	OCLASS_TSCONFIG,			/* pg_ts_config */
-	OCLASS_ROLE,				/* pg_authid */
-	OCLASS_ROLE_MEMBERSHIP,		/* pg_auth_members */
-	OCLASS_DATABASE,			/* pg_database */
-	OCLASS_TBLSPACE,			/* pg_tablespace */
-	OCLASS_FDW,					/* pg_foreign_data_wrapper */
-	OCLASS_FOREIGN_SERVER,		/* pg_foreign_server */
-	OCLASS_USER_MAPPING,		/* pg_user_mapping */
-	OCLASS_DEFACL,				/* pg_default_acl */
-	OCLASS_EXTENSION,			/* pg_extension */
-	OCLASS_EVENT_TRIGGER,		/* pg_event_trigger */
-	OCLASS_PARAMETER_ACL,		/* pg_parameter_acl */
-	OCLASS_POLICY,				/* pg_policy */
-	OCLASS_PUBLICATION,			/* pg_publication */
-	OCLASS_PUBLICATION_NAMESPACE,	/* pg_publication_namespace */
-	OCLASS_PUBLICATION_REL,		/* pg_publication_rel */
-	OCLASS_SUBSCRIPTION,		/* pg_subscription */
-	OCLASS_TRANSFORM,			/* pg_transform */
-} ObjectClass;
-
 /* flag bits for performDeletion/performMultipleDeletions: */
 #define PERFORM_DELETION_INTERNAL			0x0001	/* internal action */
 #define PERFORM_DELETION_CONCURRENTLY		0x0002	/* concurrent drop */
@@ -162,8 +113,6 @@ extern void recordDependencyOnSingleRelExpr(const ObjectAddress *depender,
 											DependencyType self_behavior,
 											bool reverse_self);
 
-extern ObjectClass getObjectClass(const ObjectAddress *object);
-
 extern ObjectAddresses *new_object_addresses(void);
 
 extern void add_exact_object_address(const ObjectAddress *object,
diff --git a/src/include/commands/event_trigger.h b/src/include/commands/event_trigger.h
index f8fb659f91..90fc1af5f6 100644
--- a/src/include/commands/event_trigger.h
+++ b/src/include/commands/event_trigger.h
@@ -51,7 +51,7 @@ extern ObjectAddress AlterEventTriggerOwner(const char *name, Oid newOwnerId);
 extern void AlterEventTriggerOwner_oid(Oid, Oid newOwnerId);
 
 extern bool EventTriggerSupportsObjectType(ObjectType obtype);
-extern bool EventTriggerSupportsObjectClass(ObjectClass objclass);
+extern bool EventTriggerSupportsObject(const ObjectAddress *object);
 extern void EventTriggerDDLCommandStart(Node *parsetree);
 extern void EventTriggerDDLCommandEnd(Node *parsetree);
 extern void EventTriggerSQLDrop(Node *parsetree);
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 4679660837..cfa9d5aaea 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -1687,7 +1687,6 @@ ObjectAddressAndFlags
 ObjectAddressExtra
 ObjectAddressStack
 ObjectAddresses
-ObjectClass
 ObjectPropertyType
 ObjectType
 ObjectWithArgs