}
-/*
- * 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
*
#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"
pfree(logdetail.data);
}
+/*
+ * 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.
*
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;
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;
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;
/*
*/
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 */
static const ObjectPropertyType ObjectProperty[] =
{
{
+ "access method",
AccessMethodRelationId,
AmOidIndexId,
AMOID,
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,
false
},
{
+ "collation",
CollationRelationId,
CollationOidIndexId,
COLLOID,
true
},
{
+ "constraint",
ConstraintRelationId,
ConstraintOidIndexId,
CONSTROID,
false
},
{
+ "conversion",
ConversionRelationId,
ConversionOidIndexId,
CONVOID,
true
},
{
+ "database",
DatabaseRelationId,
DatabaseOidIndexId,
DATABASEOID,
true
},
{
+ "default ACL",
+ DefaultAclRelationId,
+ DefaultAclOidIndexId,
+ -1,
+ -1,
+ Anum_pg_default_acl_oid,
+ InvalidAttrNumber,
+ InvalidAttrNumber,
+ InvalidAttrNumber,
+ InvalidAttrNumber,
+ OBJECT_DEFACL,
+ false
+ },
+ {
+ "extension",
ExtensionRelationId,
ExtensionOidIndexId,
-1,
true
},
{
+ "foreign-data wrapper",
ForeignDataWrapperRelationId,
ForeignDataWrapperOidIndexId,
FOREIGNDATAWRAPPEROID,
true
},
{
+ "foreign server",
ForeignServerRelationId,
ForeignServerOidIndexId,
FOREIGNSERVEROID,
true
},
{
+ "function",
ProcedureRelationId,
ProcedureOidIndexId,
PROCOID,
false
},
{
+ "language",
LanguageRelationId,
LanguageOidIndexId,
LANGOID,
true
},
{
+ "large object metadata",
LargeObjectMetadataRelationId,
LargeObjectMetadataOidIndexId,
-1,
false
},
{
+ "operator class",
OperatorClassRelationId,
OpclassOidIndexId,
CLAOID,
true
},
{
+ "operator",
OperatorRelationId,
OperatorOidIndexId,
OPEROID,
false
},
{
+ "operator family",
OperatorFamilyRelationId,
OpfamilyOidIndexId,
OPFAMILYOID,
true
},
{
+ "role",
AuthIdRelationId,
AuthIdOidIndexId,
AUTHOID,
true
},
{
+ "rule",
RewriteRelationId,
RewriteOidIndexId,
-1,
false
},
{
+ "schema",
NamespaceRelationId,
NamespaceOidIndexId,
NAMESPACEOID,
true
},
{
+ "relation",
RelationRelationId,
ClassOidIndexId,
RELOID,
true
},
{
+ "tablespace",
TableSpaceRelationId,
TablespaceOidIndexId,
TABLESPACEOID,
true
},
{
+ "transform",
TransformRelationId,
TransformOidIndexId,
TRFOID,
Anum_pg_transform_oid
},
{
+ "trigger",
TriggerRelationId,
TriggerOidIndexId,
-1,
false
},
{
+ "policy",
PolicyRelationId,
PolicyOidIndexId,
-1,
false
},
{
+ "event trigger",
EventTriggerRelationId,
EventTriggerOidIndexId,
EVENTTRIGGEROID,
true
},
{
+ "text search configuration",
TSConfigRelationId,
TSConfigOidIndexId,
TSCONFIGOID,
true
},
{
+ "text search dictionary",
TSDictionaryRelationId,
TSDictionaryOidIndexId,
TSDICTOID,
true
},
{
+ "text search parser",
TSParserRelationId,
TSParserOidIndexId,
TSPARSEROID,
true
},
{
+ "text search template",
TSTemplateRelationId,
TSTemplateOidIndexId,
TSTEMPLATEOID,
true,
},
{
+ "type",
TypeRelationId,
TypeOidIndexId,
TYPEOID,
true
},
{
+ "publication",
PublicationRelationId,
PublicationObjectIndexId,
PUBLICATIONOID,
true
},
{
+ "subscription",
SubscriptionRelationId,
SubscriptionObjectIndexId,
SUBSCRIPTIONOID,
true
},
{
+ "extented statistics",
StatisticExtRelationId,
StatisticExtOidIndexId,
STATEXTOID,
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
+ },
};
/*
/*
* 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)
{
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);
-}
return myself;
}
-/*
- * 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
*
return myself;
}
-/*
- * 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
-1, false, TYPALIGN_INT));
}
-/*
- * 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
*/
}
-/*
- * 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
*/
}
-/*
- * 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
}
-/*
- * 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().
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)
}
-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
*
}
}
-/*
- * 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
*
return myself;
}
-/*
- * 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
*
table_close(rel, RowExclusiveLock);
}
-/*
- * 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.
*/
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
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 -----------------------*/
/*
return address;
}
-/*
- * 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
*/
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 -----------------------*/
/*
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);
const char *collversion,
bool if_not_exists,
bool quiet);
-extern void RemoveCollationById(Oid collationOid);
#endif /* PG_COLLATION_H */
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);
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);
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,
/* 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);
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,
/* 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);
((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);
#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);
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);
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);
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);