diff options
Diffstat (limited to 'src')
23 files changed, 175 insertions, 619 deletions
diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c index cb2c4972ade..c6261614085 100644 --- a/src/backend/catalog/aclchk.c +++ b/src/backend/catalog/aclchk.c @@ -1499,39 +1499,6 @@ RemoveRoleFromObjectACL(Oid roleid, Oid classid, Oid objid) /* - * Remove a pg_default_acl entry - */ -void -RemoveDefaultACLById(Oid defaclOid) -{ - Relation rel; - ScanKeyData skey[1]; - SysScanDesc scan; - HeapTuple tuple; - - rel = table_open(DefaultAclRelationId, RowExclusiveLock); - - ScanKeyInit(&skey[0], - Anum_pg_default_acl_oid, - BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(defaclOid)); - - scan = systable_beginscan(rel, DefaultAclOidIndexId, true, - NULL, 1, skey); - - tuple = systable_getnext(scan); - - if (!HeapTupleIsValid(tuple)) - elog(ERROR, "could not find tuple for default ACL %u", defaclOid); - - CatalogTupleDelete(rel, &tuple->t_self); - - systable_endscan(scan); - table_close(rel, RowExclusiveLock); -} - - -/* * expand_col_privileges * * OR the specified privilege(s) into per-column array entries for each diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index 5565e6fc197..b33a2f94af0 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -66,9 +66,7 @@ #include "commands/event_trigger.h" #include "commands/extension.h" #include "commands/policy.h" -#include "commands/proclang.h" #include "commands/publicationcmds.h" -#include "commands/schemacmds.h" #include "commands/seclabel.h" #include "commands/sequence.h" #include "commands/trigger.h" @@ -1224,6 +1222,62 @@ reportDependentObjects(const ObjectAddresses *targetObjects, } /* + * Drop an object by OID. Works for most catalogs, if no special processing + * is needed. + */ +static void +DropObjectById(const ObjectAddress *object) +{ + int cacheId; + Relation rel; + HeapTuple tup; + + cacheId = get_object_catcache_oid(object->classId); + + rel = table_open(object->classId, RowExclusiveLock); + + /* + * Use the system cache for the oid column, if one exists. + */ + if (cacheId >= 0) + { + tup = SearchSysCache1(cacheId, ObjectIdGetDatum(object->objectId)); + if (!HeapTupleIsValid(tup)) + elog(ERROR, "cache lookup failed for %s %u", + get_object_class_descr(object->classId), object->objectId); + + CatalogTupleDelete(rel, &tup->t_self); + + ReleaseSysCache(tup); + } + else + { + ScanKeyData skey[1]; + SysScanDesc scan; + + ScanKeyInit(&skey[0], + get_object_attnum_oid(object->classId), + BTEqualStrategyNumber, F_OIDEQ, + ObjectIdGetDatum(object->objectId)); + + scan = systable_beginscan(rel, get_object_oid_index(object->classId), true, + NULL, 1, skey); + + /* we expect exactly one match */ + tup = systable_getnext(scan); + if (!HeapTupleIsValid(tup)) + elog(ERROR, "could not find tuple for %s %u", + get_object_class_descr(object->classId), object->objectId); + + CatalogTupleDelete(rel, &tup->t_self); + + systable_endscan(scan); + } + + table_close(rel, RowExclusiveLock); +} + +/* * deleteOneObject: delete a single object for performDeletion. * * *depRel is the already-open pg_depend relation. @@ -1376,30 +1430,14 @@ doDeletion(const ObjectAddress *object, int flags) RemoveTypeById(object->objectId); break; - case OCLASS_CAST: - DropCastById(object->objectId); - break; - - case OCLASS_COLLATION: - RemoveCollationById(object->objectId); - break; - case OCLASS_CONSTRAINT: RemoveConstraintById(object->objectId); break; - case OCLASS_CONVERSION: - RemoveConversionById(object->objectId); - break; - case OCLASS_DEFAULT: RemoveAttrDefaultById(object->objectId); break; - case OCLASS_LANGUAGE: - DropProceduralLanguageById(object->objectId); - break; - case OCLASS_LARGEOBJECT: LargeObjectDrop(object->objectId); break; @@ -1408,26 +1446,6 @@ doDeletion(const ObjectAddress *object, int flags) RemoveOperatorById(object->objectId); break; - case OCLASS_OPCLASS: - RemoveOpClassById(object->objectId); - break; - - case OCLASS_OPFAMILY: - RemoveOpFamilyById(object->objectId); - break; - - case OCLASS_AM: - RemoveAccessMethodById(object->objectId); - break; - - case OCLASS_AMOP: - RemoveAmOpEntryById(object->objectId); - break; - - case OCLASS_AMPROC: - RemoveAmProcEntryById(object->objectId); - break; - case OCLASS_REWRITE: RemoveRewriteRuleById(object->objectId); break; @@ -1436,73 +1454,47 @@ doDeletion(const ObjectAddress *object, int flags) RemoveTriggerById(object->objectId); break; - case OCLASS_SCHEMA: - RemoveSchemaById(object->objectId); - break; - case OCLASS_STATISTIC_EXT: RemoveStatisticsById(object->objectId); break; - case OCLASS_TSPARSER: - RemoveTSParserById(object->objectId); - break; - - case OCLASS_TSDICT: - RemoveTSDictionaryById(object->objectId); - break; - - case OCLASS_TSTEMPLATE: - RemoveTSTemplateById(object->objectId); - break; - case OCLASS_TSCONFIG: RemoveTSConfigurationById(object->objectId); break; - /* - * OCLASS_ROLE, OCLASS_DATABASE, OCLASS_TBLSPACE intentionally not - * handled here - */ - - case OCLASS_FDW: - RemoveForeignDataWrapperById(object->objectId); - break; - - case OCLASS_FOREIGN_SERVER: - RemoveForeignServerById(object->objectId); - break; - - case OCLASS_USER_MAPPING: - RemoveUserMappingById(object->objectId); - break; - - case OCLASS_DEFACL: - RemoveDefaultACLById(object->objectId); - break; - case OCLASS_EXTENSION: RemoveExtensionById(object->objectId); break; - case OCLASS_EVENT_TRIGGER: - RemoveEventTriggerById(object->objectId); - break; - case OCLASS_POLICY: RemovePolicyById(object->objectId); break; - case OCLASS_PUBLICATION: - RemovePublicationById(object->objectId); - break; - case OCLASS_PUBLICATION_REL: RemovePublicationRelById(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_PUBLICATION: case OCLASS_TRANSFORM: - DropTransformById(object->objectId); + DropObjectById(object); break; /* diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index 84463f76fc9..534df8e8020 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -97,6 +97,7 @@ */ typedef struct { + const char *class_descr; /* string describing the catalog, for internal error messages */ Oid class_oid; /* oid of catalog */ Oid oid_index_oid; /* oid of index on system oid column */ int oid_catcache_id; /* id of catcache on system oid column */ @@ -118,6 +119,7 @@ typedef struct static const ObjectPropertyType ObjectProperty[] = { { + "access method", AccessMethodRelationId, AmOidIndexId, AMOID, @@ -131,6 +133,35 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "access method operator", + AccessMethodOperatorRelationId, + AccessMethodOperatorOidIndexId, + -1, + -1, + Anum_pg_amop_oid, + InvalidAttrNumber, + InvalidAttrNumber, + InvalidAttrNumber, + InvalidAttrNumber, + OBJECT_AMOP, + false + }, + { + "access method procedure", + AccessMethodProcedureRelationId, + AccessMethodProcedureOidIndexId, + -1, + -1, + Anum_pg_amproc_oid, + InvalidAttrNumber, + InvalidAttrNumber, + InvalidAttrNumber, + InvalidAttrNumber, + OBJECT_AMPROC, + false + }, + { + "cast", CastRelationId, CastOidIndexId, -1, @@ -144,6 +175,7 @@ static const ObjectPropertyType ObjectProperty[] = false }, { + "collation", CollationRelationId, CollationOidIndexId, COLLOID, @@ -157,6 +189,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "constraint", ConstraintRelationId, ConstraintOidIndexId, CONSTROID, @@ -170,6 +203,7 @@ static const ObjectPropertyType ObjectProperty[] = false }, { + "conversion", ConversionRelationId, ConversionOidIndexId, CONVOID, @@ -183,6 +217,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "database", DatabaseRelationId, DatabaseOidIndexId, DATABASEOID, @@ -196,6 +231,21 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "default ACL", + DefaultAclRelationId, + DefaultAclOidIndexId, + -1, + -1, + Anum_pg_default_acl_oid, + InvalidAttrNumber, + InvalidAttrNumber, + InvalidAttrNumber, + InvalidAttrNumber, + OBJECT_DEFACL, + false + }, + { + "extension", ExtensionRelationId, ExtensionOidIndexId, -1, @@ -209,6 +259,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "foreign-data wrapper", ForeignDataWrapperRelationId, ForeignDataWrapperOidIndexId, FOREIGNDATAWRAPPEROID, @@ -222,6 +273,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "foreign server", ForeignServerRelationId, ForeignServerOidIndexId, FOREIGNSERVEROID, @@ -235,6 +287,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "function", ProcedureRelationId, ProcedureOidIndexId, PROCOID, @@ -248,6 +301,7 @@ static const ObjectPropertyType ObjectProperty[] = false }, { + "language", LanguageRelationId, LanguageOidIndexId, LANGOID, @@ -261,6 +315,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "large object metadata", LargeObjectMetadataRelationId, LargeObjectMetadataOidIndexId, -1, @@ -274,6 +329,7 @@ static const ObjectPropertyType ObjectProperty[] = false }, { + "operator class", OperatorClassRelationId, OpclassOidIndexId, CLAOID, @@ -287,6 +343,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "operator", OperatorRelationId, OperatorOidIndexId, OPEROID, @@ -300,6 +357,7 @@ static const ObjectPropertyType ObjectProperty[] = false }, { + "operator family", OperatorFamilyRelationId, OpfamilyOidIndexId, OPFAMILYOID, @@ -313,6 +371,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "role", AuthIdRelationId, AuthIdOidIndexId, AUTHOID, @@ -326,6 +385,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "rule", RewriteRelationId, RewriteOidIndexId, -1, @@ -339,6 +399,7 @@ static const ObjectPropertyType ObjectProperty[] = false }, { + "schema", NamespaceRelationId, NamespaceOidIndexId, NAMESPACEOID, @@ -352,6 +413,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "relation", RelationRelationId, ClassOidIndexId, RELOID, @@ -365,6 +427,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "tablespace", TableSpaceRelationId, TablespaceOidIndexId, TABLESPACEOID, @@ -378,6 +441,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "transform", TransformRelationId, TransformOidIndexId, TRFOID, @@ -385,6 +449,7 @@ static const ObjectPropertyType ObjectProperty[] = Anum_pg_transform_oid }, { + "trigger", TriggerRelationId, TriggerOidIndexId, -1, @@ -398,6 +463,7 @@ static const ObjectPropertyType ObjectProperty[] = false }, { + "policy", PolicyRelationId, PolicyOidIndexId, -1, @@ -411,6 +477,7 @@ static const ObjectPropertyType ObjectProperty[] = false }, { + "event trigger", EventTriggerRelationId, EventTriggerOidIndexId, EVENTTRIGGEROID, @@ -424,6 +491,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "text search configuration", TSConfigRelationId, TSConfigOidIndexId, TSCONFIGOID, @@ -437,6 +505,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "text search dictionary", TSDictionaryRelationId, TSDictionaryOidIndexId, TSDICTOID, @@ -450,6 +519,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "text search parser", TSParserRelationId, TSParserOidIndexId, TSPARSEROID, @@ -463,6 +533,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "text search template", TSTemplateRelationId, TSTemplateOidIndexId, TSTEMPLATEOID, @@ -476,6 +547,7 @@ static const ObjectPropertyType ObjectProperty[] = true, }, { + "type", TypeRelationId, TypeOidIndexId, TYPEOID, @@ -489,6 +561,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "publication", PublicationRelationId, PublicationObjectIndexId, PUBLICATIONOID, @@ -502,6 +575,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "subscription", SubscriptionRelationId, SubscriptionObjectIndexId, SUBSCRIPTIONOID, @@ -515,6 +589,7 @@ static const ObjectPropertyType ObjectProperty[] = true }, { + "extented statistics", StatisticExtRelationId, StatisticExtOidIndexId, STATEXTOID, @@ -526,7 +601,21 @@ static const ObjectPropertyType ObjectProperty[] = InvalidAttrNumber, /* no ACL (same as relation) */ OBJECT_STATISTIC_EXT, true - } + }, + { + "user mapping", + UserMappingRelationId, + UserMappingOidIndexId, + USERMAPPINGOID, + -1, + Anum_pg_user_mapping_oid, + InvalidAttrNumber, + InvalidAttrNumber, + InvalidAttrNumber, + InvalidAttrNumber, + OBJECT_USER_MAPPING, + false + }, }; /* @@ -2549,6 +2638,14 @@ read_objtype_from_string(const char *objtype) /* * Interfaces to reference fields of ObjectPropertyType */ +const char * +get_object_class_descr(Oid class_id) +{ + const ObjectPropertyType *prop = get_object_property_data(class_id); + + return prop->class_descr; +} + Oid get_object_oid_index(Oid class_id) { diff --git a/src/backend/catalog/pg_collation.c b/src/backend/catalog/pg_collation.c index 8559779a4f3..5fdf1acb7e5 100644 --- a/src/backend/catalog/pg_collation.c +++ b/src/backend/catalog/pg_collation.c @@ -203,39 +203,3 @@ CollationCreate(const char *collname, Oid collnamespace, return oid; } - -/* - * RemoveCollationById - * - * Remove a tuple from pg_collation by Oid. This function is solely - * called inside catalog/dependency.c - */ -void -RemoveCollationById(Oid collationOid) -{ - Relation rel; - ScanKeyData scanKeyData; - SysScanDesc scandesc; - HeapTuple tuple; - - rel = table_open(CollationRelationId, RowExclusiveLock); - - ScanKeyInit(&scanKeyData, - Anum_pg_collation_oid, - BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(collationOid)); - - scandesc = systable_beginscan(rel, CollationOidIndexId, true, - NULL, 1, &scanKeyData); - - tuple = systable_getnext(scandesc); - - if (HeapTupleIsValid(tuple)) - CatalogTupleDelete(rel, &tuple->t_self); - else - elog(ERROR, "could not find tuple for collation %u", collationOid); - - systable_endscan(scandesc); - - table_close(rel, RowExclusiveLock); -} diff --git a/src/backend/catalog/pg_conversion.c b/src/backend/catalog/pg_conversion.c index b38df4f696e..28b676a1fa8 100644 --- a/src/backend/catalog/pg_conversion.c +++ b/src/backend/catalog/pg_conversion.c @@ -143,39 +143,6 @@ ConversionCreate(const char *conname, Oid connamespace, } /* - * RemoveConversionById - * - * Remove a tuple from pg_conversion by Oid. This function is solely - * called inside catalog/dependency.c - */ -void -RemoveConversionById(Oid conversionOid) -{ - Relation rel; - HeapTuple tuple; - TableScanDesc scan; - ScanKeyData scanKeyData; - - ScanKeyInit(&scanKeyData, - Anum_pg_conversion_oid, - BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(conversionOid)); - - /* open pg_conversion */ - rel = table_open(ConversionRelationId, RowExclusiveLock); - - scan = table_beginscan_catalog(rel, 1, &scanKeyData); - - /* search for the target tuple */ - if (HeapTupleIsValid(tuple = heap_getnext(scan, ForwardScanDirection))) - CatalogTupleDelete(rel, &tuple->t_self); - else - elog(ERROR, "could not find tuple for conversion %u", conversionOid); - table_endscan(scan); - table_close(rel, RowExclusiveLock); -} - -/* * FindDefaultConversion * * Find "default" conversion proc by for_encoding and to_encoding in the diff --git a/src/backend/commands/amcmds.c b/src/backend/commands/amcmds.c index b884bfa0b00..6f05ee715b4 100644 --- a/src/backend/commands/amcmds.c +++ b/src/backend/commands/amcmds.c @@ -116,33 +116,6 @@ CreateAccessMethod(CreateAmStmt *stmt) } /* - * Guts of access method deletion. - */ -void -RemoveAccessMethodById(Oid amOid) -{ - Relation relation; - HeapTuple tup; - - if (!superuser()) - ereport(ERROR, - (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("must be superuser to drop access methods"))); - - relation = table_open(AccessMethodRelationId, RowExclusiveLock); - - tup = SearchSysCache1(AMOID, ObjectIdGetDatum(amOid)); - if (!HeapTupleIsValid(tup)) - elog(ERROR, "cache lookup failed for access method %u", amOid); - - CatalogTupleDelete(relation, &tup->t_self); - - ReleaseSysCache(tup); - - table_close(relation, RowExclusiveLock); -} - -/* * get_am_type_oid * Worker for various get_am_*_oid variants * diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c index 02ab40eaac7..151cdfff39d 100644 --- a/src/backend/commands/event_trigger.c +++ b/src/backend/commands/event_trigger.c @@ -356,28 +356,6 @@ filter_list_to_array(List *filterlist) } /* - * Guts of event trigger deletion. - */ -void -RemoveEventTriggerById(Oid trigOid) -{ - Relation tgrel; - HeapTuple tup; - - tgrel = table_open(EventTriggerRelationId, RowExclusiveLock); - - tup = SearchSysCache1(EVENTTRIGGEROID, ObjectIdGetDatum(trigOid)); - if (!HeapTupleIsValid(tup)) - elog(ERROR, "cache lookup failed for event trigger %u", trigOid); - - CatalogTupleDelete(tgrel, &tup->t_self); - - ReleaseSysCache(tup); - - table_close(tgrel, RowExclusiveLock); -} - -/* * ALTER EVENT TRIGGER foo ENABLE|DISABLE|ENABLE ALWAYS|REPLICA */ Oid diff --git a/src/backend/commands/foreigncmds.c b/src/backend/commands/foreigncmds.c index a399ab4de9c..de31ddd1f38 100644 --- a/src/backend/commands/foreigncmds.c +++ b/src/backend/commands/foreigncmds.c @@ -836,30 +836,6 @@ AlterForeignDataWrapper(AlterFdwStmt *stmt) /* - * Drop foreign-data wrapper by OID - */ -void -RemoveForeignDataWrapperById(Oid fdwId) -{ - HeapTuple tp; - Relation rel; - - rel = table_open(ForeignDataWrapperRelationId, RowExclusiveLock); - - tp = SearchSysCache1(FOREIGNDATAWRAPPEROID, ObjectIdGetDatum(fdwId)); - - if (!HeapTupleIsValid(tp)) - elog(ERROR, "cache lookup failed for foreign-data wrapper %u", fdwId); - - CatalogTupleDelete(rel, &tp->t_self); - - ReleaseSysCache(tp); - - table_close(rel, RowExclusiveLock); -} - - -/* * Create a foreign server */ ObjectAddress @@ -1086,30 +1062,6 @@ AlterForeignServer(AlterForeignServerStmt *stmt) /* - * Drop foreign server by OID - */ -void -RemoveForeignServerById(Oid srvId) -{ - HeapTuple tp; - Relation rel; - - rel = table_open(ForeignServerRelationId, RowExclusiveLock); - - tp = SearchSysCache1(FOREIGNSERVEROID, ObjectIdGetDatum(srvId)); - - if (!HeapTupleIsValid(tp)) - elog(ERROR, "cache lookup failed for foreign server %u", srvId); - - CatalogTupleDelete(rel, &tp->t_self); - - ReleaseSysCache(tp); - - table_close(rel, RowExclusiveLock); -} - - -/* * Common routine to check permission for user-mapping-related DDL * commands. We allow server owners to operate on any mapping, and * users to operate on their own mapping. @@ -1436,29 +1388,6 @@ RemoveUserMapping(DropUserMappingStmt *stmt) /* - * Drop user mapping by OID. This is called to clean up dependencies. - */ -void -RemoveUserMappingById(Oid umId) -{ - HeapTuple tp; - Relation rel; - - rel = table_open(UserMappingRelationId, RowExclusiveLock); - - tp = SearchSysCache1(USERMAPPINGOID, ObjectIdGetDatum(umId)); - - if (!HeapTupleIsValid(tp)) - elog(ERROR, "cache lookup failed for user mapping %u", umId); - - CatalogTupleDelete(rel, &tp->t_self); - - ReleaseSysCache(tp); - - table_close(rel, RowExclusiveLock); -} - -/* * Create a foreign table * call after DefineRelation(). */ diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index bb918388842..1b5bdcec8b8 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -1646,32 +1646,6 @@ CreateCast(CreateCastStmt *stmt) return myself; } -void -DropCastById(Oid castOid) -{ - Relation relation; - ScanKeyData scankey; - SysScanDesc scan; - HeapTuple tuple; - - relation = table_open(CastRelationId, RowExclusiveLock); - - ScanKeyInit(&scankey, - Anum_pg_cast_oid, - BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(castOid)); - scan = systable_beginscan(relation, CastOidIndexId, true, - NULL, 1, &scankey); - - tuple = systable_getnext(scan); - if (!HeapTupleIsValid(tuple)) - elog(ERROR, "could not find tuple for cast %u", castOid); - CatalogTupleDelete(relation, &tuple->t_self); - - systable_endscan(scan); - table_close(relation, RowExclusiveLock); -} - static void check_transform_function(Form_pg_proc procstruct) @@ -1933,33 +1907,6 @@ get_transform_oid(Oid type_id, Oid lang_id, bool missing_ok) } -void -DropTransformById(Oid transformOid) -{ - Relation relation; - ScanKeyData scankey; - SysScanDesc scan; - HeapTuple tuple; - - relation = table_open(TransformRelationId, RowExclusiveLock); - - ScanKeyInit(&scankey, - Anum_pg_transform_oid, - BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(transformOid)); - scan = systable_beginscan(relation, TransformOidIndexId, true, - NULL, 1, &scankey); - - tuple = systable_getnext(scan); - if (!HeapTupleIsValid(tuple)) - elog(ERROR, "could not find tuple for transform %u", transformOid); - CatalogTupleDelete(relation, &tuple->t_self); - - systable_endscan(scan); - table_close(relation, RowExclusiveLock); -} - - /* * Subroutine for ALTER FUNCTION/AGGREGATE SET SCHEMA/RENAME * diff --git a/src/backend/commands/opclasscmds.c b/src/backend/commands/opclasscmds.c index 7d44d3a049b..351866f9f22 100644 --- a/src/backend/commands/opclasscmds.c +++ b/src/backend/commands/opclasscmds.c @@ -1658,105 +1658,6 @@ dropProcedures(List *opfamilyname, Oid amoid, Oid opfamilyoid, } /* - * Deletion subroutines for use by dependency.c. - */ -void -RemoveOpFamilyById(Oid opfamilyOid) -{ - Relation rel; - HeapTuple tup; - - rel = table_open(OperatorFamilyRelationId, RowExclusiveLock); - - tup = SearchSysCache1(OPFAMILYOID, ObjectIdGetDatum(opfamilyOid)); - if (!HeapTupleIsValid(tup)) /* should not happen */ - elog(ERROR, "cache lookup failed for opfamily %u", opfamilyOid); - - CatalogTupleDelete(rel, &tup->t_self); - - ReleaseSysCache(tup); - - table_close(rel, RowExclusiveLock); -} - -void -RemoveOpClassById(Oid opclassOid) -{ - Relation rel; - HeapTuple tup; - - rel = table_open(OperatorClassRelationId, RowExclusiveLock); - - tup = SearchSysCache1(CLAOID, ObjectIdGetDatum(opclassOid)); - if (!HeapTupleIsValid(tup)) /* should not happen */ - elog(ERROR, "cache lookup failed for opclass %u", opclassOid); - - CatalogTupleDelete(rel, &tup->t_self); - - ReleaseSysCache(tup); - - table_close(rel, RowExclusiveLock); -} - -void -RemoveAmOpEntryById(Oid entryOid) -{ - Relation rel; - HeapTuple tup; - ScanKeyData skey[1]; - SysScanDesc scan; - - ScanKeyInit(&skey[0], - Anum_pg_amop_oid, - BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(entryOid)); - - rel = table_open(AccessMethodOperatorRelationId, RowExclusiveLock); - - scan = systable_beginscan(rel, AccessMethodOperatorOidIndexId, true, - NULL, 1, skey); - - /* we expect exactly one match */ - tup = systable_getnext(scan); - if (!HeapTupleIsValid(tup)) - elog(ERROR, "could not find tuple for amop entry %u", entryOid); - - CatalogTupleDelete(rel, &tup->t_self); - - systable_endscan(scan); - table_close(rel, RowExclusiveLock); -} - -void -RemoveAmProcEntryById(Oid entryOid) -{ - Relation rel; - HeapTuple tup; - ScanKeyData skey[1]; - SysScanDesc scan; - - ScanKeyInit(&skey[0], - Anum_pg_amproc_oid, - BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(entryOid)); - - rel = table_open(AccessMethodProcedureRelationId, RowExclusiveLock); - - scan = systable_beginscan(rel, AccessMethodProcedureOidIndexId, true, - NULL, 1, skey); - - /* we expect exactly one match */ - tup = systable_getnext(scan); - if (!HeapTupleIsValid(tup)) - elog(ERROR, "could not find tuple for amproc entry %u", entryOid); - - CatalogTupleDelete(rel, &tup->t_self); - - systable_endscan(scan); - table_close(rel, RowExclusiveLock); -} - -/* * Subroutine for ALTER OPERATOR CLASS SET SCHEMA/RENAME * * Is there an operator class with the given name and signature already diff --git a/src/backend/commands/proclang.c b/src/backend/commands/proclang.c index 21ceeb7e9a1..14153426bdd 100644 --- a/src/backend/commands/proclang.c +++ b/src/backend/commands/proclang.c @@ -219,28 +219,6 @@ CreateProceduralLanguage(CreatePLangStmt *stmt) } /* - * Guts of language dropping. - */ -void -DropProceduralLanguageById(Oid langOid) -{ - Relation rel; - HeapTuple langTup; - - rel = table_open(LanguageRelationId, RowExclusiveLock); - - langTup = SearchSysCache1(LANGOID, ObjectIdGetDatum(langOid)); - if (!HeapTupleIsValid(langTup)) /* should not happen */ - elog(ERROR, "cache lookup failed for language %u", langOid); - - CatalogTupleDelete(rel, &langTup->t_self); - - ReleaseSysCache(langTup); - - table_close(rel, RowExclusiveLock); -} - -/* * get_language_oid - given a language name, look up the OID * * If missing_ok is false, throw an error if language name not found. If diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c index a5e29b5a827..eabbc7473bb 100644 --- a/src/backend/commands/publicationcmds.c +++ b/src/backend/commands/publicationcmds.c @@ -469,29 +469,6 @@ AlterPublication(AlterPublicationStmt *stmt) } /* - * Drop publication by OID - */ -void -RemovePublicationById(Oid pubid) -{ - Relation rel; - HeapTuple tup; - - rel = table_open(PublicationRelationId, RowExclusiveLock); - - tup = SearchSysCache1(PUBLICATIONOID, ObjectIdGetDatum(pubid)); - - if (!HeapTupleIsValid(tup)) - elog(ERROR, "cache lookup failed for publication %u", pubid); - - CatalogTupleDelete(rel, &tup->t_self); - - ReleaseSysCache(tup); - - table_close(rel, RowExclusiveLock); -} - -/* * Remove relation from publication by mapping OID. */ void diff --git a/src/backend/commands/schemacmds.c b/src/backend/commands/schemacmds.c index 1e6e731eb58..30138625288 100644 --- a/src/backend/commands/schemacmds.c +++ b/src/backend/commands/schemacmds.c @@ -210,29 +210,6 @@ CreateSchemaCommand(CreateSchemaStmt *stmt, const char *queryString, return namespaceId; } -/* - * Guts of schema deletion. - */ -void -RemoveSchemaById(Oid schemaOid) -{ - Relation relation; - HeapTuple tup; - - relation = table_open(NamespaceRelationId, RowExclusiveLock); - - tup = SearchSysCache1(NAMESPACEOID, - ObjectIdGetDatum(schemaOid)); - if (!HeapTupleIsValid(tup)) /* should not happen */ - elog(ERROR, "cache lookup failed for namespace %u", schemaOid); - - CatalogTupleDelete(relation, &tup->t_self); - - ReleaseSysCache(tup); - - table_close(relation, RowExclusiveLock); -} - /* * Rename schema diff --git a/src/backend/commands/tsearchcmds.c b/src/backend/commands/tsearchcmds.c index 9da8f7fd579..319a62012ed 100644 --- a/src/backend/commands/tsearchcmds.c +++ b/src/backend/commands/tsearchcmds.c @@ -291,29 +291,6 @@ DefineTSParser(List *names, List *parameters) return address; } -/* - * Guts of TS parser deletion. - */ -void -RemoveTSParserById(Oid prsId) -{ - Relation relation; - HeapTuple tup; - - relation = table_open(TSParserRelationId, RowExclusiveLock); - - tup = SearchSysCache1(TSPARSEROID, ObjectIdGetDatum(prsId)); - - if (!HeapTupleIsValid(tup)) - elog(ERROR, "cache lookup failed for text search parser %u", prsId); - - CatalogTupleDelete(relation, &tup->t_self); - - ReleaseSysCache(tup); - - table_close(relation, RowExclusiveLock); -} - /* ---------------------- TS Dictionary commands -----------------------*/ /* @@ -505,30 +482,6 @@ DefineTSDictionary(List *names, List *parameters) } /* - * Guts of TS dictionary deletion. - */ -void -RemoveTSDictionaryById(Oid dictId) -{ - Relation relation; - HeapTuple tup; - - relation = table_open(TSDictionaryRelationId, RowExclusiveLock); - - tup = SearchSysCache1(TSDICTOID, ObjectIdGetDatum(dictId)); - - if (!HeapTupleIsValid(tup)) - elog(ERROR, "cache lookup failed for text search dictionary %u", - dictId); - - CatalogTupleDelete(relation, &tup->t_self); - - ReleaseSysCache(tup); - - table_close(relation, RowExclusiveLock); -} - -/* * ALTER TEXT SEARCH DICTIONARY */ ObjectAddress @@ -820,30 +773,6 @@ DefineTSTemplate(List *names, List *parameters) return address; } -/* - * Guts of TS template deletion. - */ -void -RemoveTSTemplateById(Oid tmplId) -{ - Relation relation; - HeapTuple tup; - - relation = table_open(TSTemplateRelationId, RowExclusiveLock); - - tup = SearchSysCache1(TSTEMPLATEOID, ObjectIdGetDatum(tmplId)); - - if (!HeapTupleIsValid(tup)) - elog(ERROR, "cache lookup failed for text search template %u", - tmplId); - - CatalogTupleDelete(relation, &tup->t_self); - - ReleaseSysCache(tup); - - table_close(relation, RowExclusiveLock); -} - /* ---------------------- TS Configuration commands -----------------------*/ /* diff --git a/src/include/catalog/objectaddress.h b/src/include/catalog/objectaddress.h index 7f15efd58a8..144715d4f4d 100644 --- a/src/include/catalog/objectaddress.h +++ b/src/include/catalog/objectaddress.h @@ -55,6 +55,7 @@ extern void check_object_ownership(Oid roleid, extern Oid get_object_namespace(const ObjectAddress *address); extern bool is_objectclass_supported(Oid class_id); +extern const char *get_object_class_descr(Oid class_id); extern Oid get_object_oid_index(Oid class_id); extern int get_object_catcache_oid(Oid class_id); extern int get_object_catcache_name(Oid class_id); diff --git a/src/include/catalog/pg_collation.h b/src/include/catalog/pg_collation.h index 6955bb12739..27618b324d3 100644 --- a/src/include/catalog/pg_collation.h +++ b/src/include/catalog/pg_collation.h @@ -68,6 +68,5 @@ extern Oid CollationCreate(const char *collname, Oid collnamespace, const char *collversion, bool if_not_exists, bool quiet); -extern void RemoveCollationById(Oid collationOid); #endif /* PG_COLLATION_H */ diff --git a/src/include/catalog/pg_conversion.h b/src/include/catalog/pg_conversion.h index 0e7f13e1b65..cd80a042ff1 100644 --- a/src/include/catalog/pg_conversion.h +++ b/src/include/catalog/pg_conversion.h @@ -65,7 +65,6 @@ extern ObjectAddress ConversionCreate(const char *conname, Oid connamespace, Oid conowner, int32 conforencoding, int32 contoencoding, Oid conproc, bool def); -extern void RemoveConversionById(Oid conversionOid); extern Oid FindDefaultConversion(Oid connamespace, int32 for_encoding, int32 to_encoding); diff --git a/src/include/commands/defrem.h b/src/include/commands/defrem.h index c77c9a6ed5a..c26a102b175 100644 --- a/src/include/commands/defrem.h +++ b/src/include/commands/defrem.h @@ -56,9 +56,7 @@ extern ObjectAddress CreateFunction(ParseState *pstate, CreateFunctionStmt *stmt extern void RemoveFunctionById(Oid funcOid); extern ObjectAddress AlterFunction(ParseState *pstate, AlterFunctionStmt *stmt); extern ObjectAddress CreateCast(CreateCastStmt *stmt); -extern void DropCastById(Oid castOid); extern ObjectAddress CreateTransform(CreateTransformStmt *stmt); -extern void DropTransformById(Oid transformOid); extern void IsThereFunctionInNamespace(const char *proname, int pronargs, oidvector *proargtypes, Oid nspOid); extern void ExecuteDoStmt(DoStmt *stmt, bool atomic); @@ -98,10 +96,6 @@ extern ObjectAddress DefineAggregate(ParseState *pstate, List *name, List *args, extern ObjectAddress DefineOpClass(CreateOpClassStmt *stmt); extern ObjectAddress DefineOpFamily(CreateOpFamilyStmt *stmt); extern Oid AlterOpFamily(AlterOpFamilyStmt *stmt); -extern void RemoveOpClassById(Oid opclassOid); -extern void RemoveOpFamilyById(Oid opfamilyOid); -extern void RemoveAmOpEntryById(Oid entryOid); -extern void RemoveAmProcEntryById(Oid entryOid); extern void IsThereOpClassInNamespace(const char *opcname, Oid opcmethod, Oid opcnamespace); extern void IsThereOpFamilyInNamespace(const char *opfname, Oid opfmethod, @@ -111,14 +105,11 @@ extern Oid get_opfamily_oid(Oid amID, List *opfamilyname, bool missing_ok); /* commands/tsearchcmds.c */ extern ObjectAddress DefineTSParser(List *names, List *parameters); -extern void RemoveTSParserById(Oid prsId); extern ObjectAddress DefineTSDictionary(List *names, List *parameters); -extern void RemoveTSDictionaryById(Oid dictId); extern ObjectAddress AlterTSDictionary(AlterTSDictionaryStmt *stmt); extern ObjectAddress DefineTSTemplate(List *names, List *parameters); -extern void RemoveTSTemplateById(Oid tmplId); extern ObjectAddress DefineTSConfiguration(List *names, List *parameters, ObjectAddress *copied); @@ -135,14 +126,11 @@ extern ObjectAddress AlterForeignDataWrapperOwner(const char *name, Oid newOwner extern void AlterForeignDataWrapperOwner_oid(Oid fwdId, Oid newOwnerId); extern ObjectAddress CreateForeignDataWrapper(CreateFdwStmt *stmt); extern ObjectAddress AlterForeignDataWrapper(AlterFdwStmt *stmt); -extern void RemoveForeignDataWrapperById(Oid fdwId); extern ObjectAddress CreateForeignServer(CreateForeignServerStmt *stmt); extern ObjectAddress AlterForeignServer(AlterForeignServerStmt *stmt); -extern void RemoveForeignServerById(Oid srvId); extern ObjectAddress CreateUserMapping(CreateUserMappingStmt *stmt); extern ObjectAddress AlterUserMapping(AlterUserMappingStmt *stmt); extern Oid RemoveUserMapping(DropUserMappingStmt *stmt); -extern void RemoveUserMappingById(Oid umId); extern void CreateForeignTable(CreateForeignTableStmt *stmt, Oid relid); extern void ImportForeignSchema(ImportForeignSchemaStmt *stmt); extern Datum transformGenericOptions(Oid catalogId, @@ -152,7 +140,6 @@ extern Datum transformGenericOptions(Oid catalogId, /* commands/amcmds.c */ extern ObjectAddress CreateAccessMethod(CreateAmStmt *stmt); -extern void RemoveAccessMethodById(Oid amOid); extern Oid get_index_am_oid(const char *amname, bool missing_ok); extern Oid get_table_am_oid(const char *amname, bool missing_ok); extern Oid get_am_oid(const char *amname, bool missing_ok); diff --git a/src/include/commands/event_trigger.h b/src/include/commands/event_trigger.h index 28b352051b9..407fd6a9786 100644 --- a/src/include/commands/event_trigger.h +++ b/src/include/commands/event_trigger.h @@ -41,7 +41,6 @@ typedef struct EventTriggerData ((fcinfo)->context != NULL && IsA((fcinfo)->context, EventTriggerData)) extern Oid CreateEventTrigger(CreateEventTrigStmt *stmt); -extern void RemoveEventTriggerById(Oid trigOid); extern Oid get_event_trigger_oid(const char *trigname, bool missing_ok); extern Oid AlterEventTrigger(AlterEventTrigStmt *stmt); diff --git a/src/include/commands/proclang.h b/src/include/commands/proclang.h index c70f8ec928e..d566a121f0e 100644 --- a/src/include/commands/proclang.h +++ b/src/include/commands/proclang.h @@ -17,7 +17,6 @@ #include "nodes/parsenodes.h" extern ObjectAddress CreateProceduralLanguage(CreatePLangStmt *stmt); -extern void DropProceduralLanguageById(Oid langOid); extern Oid get_language_oid(const char *langname, bool missing_ok); diff --git a/src/include/commands/publicationcmds.h b/src/include/commands/publicationcmds.h index e713df0c31b..c6b286245f4 100644 --- a/src/include/commands/publicationcmds.h +++ b/src/include/commands/publicationcmds.h @@ -20,7 +20,6 @@ extern ObjectAddress CreatePublication(CreatePublicationStmt *stmt); extern void AlterPublication(AlterPublicationStmt *stmt); -extern void RemovePublicationById(Oid pubid); extern void RemovePublicationRelById(Oid proid); extern ObjectAddress AlterPublicationOwner(const char *name, Oid newOwnerId); diff --git a/src/include/commands/schemacmds.h b/src/include/commands/schemacmds.h index ac88a35399a..e0139a8ea62 100644 --- a/src/include/commands/schemacmds.h +++ b/src/include/commands/schemacmds.h @@ -22,8 +22,6 @@ extern Oid CreateSchemaCommand(CreateSchemaStmt *parsetree, const char *queryString, int stmt_location, int stmt_len); -extern void RemoveSchemaById(Oid schemaOid); - extern ObjectAddress RenameSchema(const char *oldname, const char *newname); extern ObjectAddress AlterSchemaOwner(const char *name, Oid newOwnerId); extern void AlterSchemaOwner_oid(Oid schemaOid, Oid newOwnerId); diff --git a/src/include/utils/acl.h b/src/include/utils/acl.h index 732aa01dad0..b263d929032 100644 --- a/src/include/utils/acl.h +++ b/src/include/utils/acl.h @@ -230,7 +230,6 @@ extern void ExecuteGrantStmt(GrantStmt *stmt); extern void ExecAlterDefaultPrivilegesStmt(ParseState *pstate, AlterDefaultPrivilegesStmt *stmt); extern void RemoveRoleFromObjectACL(Oid roleid, Oid classid, Oid objid); -extern void RemoveDefaultACLById(Oid defaclOid); extern AclMode pg_attribute_aclmask(Oid table_oid, AttrNumber attnum, Oid roleid, AclMode mask, AclMaskHow how); |