6666#include "commands/event_trigger.h"
6767#include "commands/extension.h"
6868#include "commands/policy.h"
69- #include "commands/proclang.h"
7069#include "commands/publicationcmds.h"
71- #include "commands/schemacmds.h"
7270#include "commands/seclabel.h"
7371#include "commands/sequence.h"
7472#include "commands/trigger.h"
@@ -1223,6 +1221,62 @@ reportDependentObjects(const ObjectAddresses *targetObjects,
12231221 pfree (logdetail .data );
12241222}
12251223
1224+ /*
1225+ * Drop an object by OID. Works for most catalogs, if no special processing
1226+ * is needed.
1227+ */
1228+ static void
1229+ DropObjectById (const ObjectAddress * object )
1230+ {
1231+ int cacheId ;
1232+ Relation rel ;
1233+ HeapTuple tup ;
1234+
1235+ cacheId = get_object_catcache_oid (object -> classId );
1236+
1237+ rel = table_open (object -> classId , RowExclusiveLock );
1238+
1239+ /*
1240+ * Use the system cache for the oid column, if one exists.
1241+ */
1242+ if (cacheId >= 0 )
1243+ {
1244+ tup = SearchSysCache1 (cacheId , ObjectIdGetDatum (object -> objectId ));
1245+ if (!HeapTupleIsValid (tup ))
1246+ elog (ERROR , "cache lookup failed for %s %u" ,
1247+ get_object_class_descr (object -> classId ), object -> objectId );
1248+
1249+ CatalogTupleDelete (rel , & tup -> t_self );
1250+
1251+ ReleaseSysCache (tup );
1252+ }
1253+ else
1254+ {
1255+ ScanKeyData skey [1 ];
1256+ SysScanDesc scan ;
1257+
1258+ ScanKeyInit (& skey [0 ],
1259+ get_object_attnum_oid (object -> classId ),
1260+ BTEqualStrategyNumber , F_OIDEQ ,
1261+ ObjectIdGetDatum (object -> objectId ));
1262+
1263+ scan = systable_beginscan (rel , get_object_oid_index (object -> classId ), true,
1264+ NULL , 1 , skey );
1265+
1266+ /* we expect exactly one match */
1267+ tup = systable_getnext (scan );
1268+ if (!HeapTupleIsValid (tup ))
1269+ elog (ERROR , "could not find tuple for %s %u" ,
1270+ get_object_class_descr (object -> classId ), object -> objectId );
1271+
1272+ CatalogTupleDelete (rel , & tup -> t_self );
1273+
1274+ systable_endscan (scan );
1275+ }
1276+
1277+ table_close (rel , RowExclusiveLock );
1278+ }
1279+
12261280/*
12271281 * deleteOneObject: delete a single object for performDeletion.
12281282 *
@@ -1376,30 +1430,14 @@ doDeletion(const ObjectAddress *object, int flags)
13761430 RemoveTypeById (object -> objectId );
13771431 break ;
13781432
1379- case OCLASS_CAST :
1380- DropCastById (object -> objectId );
1381- break ;
1382-
1383- case OCLASS_COLLATION :
1384- RemoveCollationById (object -> objectId );
1385- break ;
1386-
13871433 case OCLASS_CONSTRAINT :
13881434 RemoveConstraintById (object -> objectId );
13891435 break ;
13901436
1391- case OCLASS_CONVERSION :
1392- RemoveConversionById (object -> objectId );
1393- break ;
1394-
13951437 case OCLASS_DEFAULT :
13961438 RemoveAttrDefaultById (object -> objectId );
13971439 break ;
13981440
1399- case OCLASS_LANGUAGE :
1400- DropProceduralLanguageById (object -> objectId );
1401- break ;
1402-
14031441 case OCLASS_LARGEOBJECT :
14041442 LargeObjectDrop (object -> objectId );
14051443 break ;
@@ -1408,26 +1446,6 @@ doDeletion(const ObjectAddress *object, int flags)
14081446 RemoveOperatorById (object -> objectId );
14091447 break ;
14101448
1411- case OCLASS_OPCLASS :
1412- RemoveOpClassById (object -> objectId );
1413- break ;
1414-
1415- case OCLASS_OPFAMILY :
1416- RemoveOpFamilyById (object -> objectId );
1417- break ;
1418-
1419- case OCLASS_AM :
1420- RemoveAccessMethodById (object -> objectId );
1421- break ;
1422-
1423- case OCLASS_AMOP :
1424- RemoveAmOpEntryById (object -> objectId );
1425- break ;
1426-
1427- case OCLASS_AMPROC :
1428- RemoveAmProcEntryById (object -> objectId );
1429- break ;
1430-
14311449 case OCLASS_REWRITE :
14321450 RemoveRewriteRuleById (object -> objectId );
14331451 break ;
@@ -1436,73 +1454,47 @@ doDeletion(const ObjectAddress *object, int flags)
14361454 RemoveTriggerById (object -> objectId );
14371455 break ;
14381456
1439- case OCLASS_SCHEMA :
1440- RemoveSchemaById (object -> objectId );
1441- break ;
1442-
14431457 case OCLASS_STATISTIC_EXT :
14441458 RemoveStatisticsById (object -> objectId );
14451459 break ;
14461460
1447- case OCLASS_TSPARSER :
1448- RemoveTSParserById (object -> objectId );
1449- break ;
1450-
1451- case OCLASS_TSDICT :
1452- RemoveTSDictionaryById (object -> objectId );
1453- break ;
1454-
1455- case OCLASS_TSTEMPLATE :
1456- RemoveTSTemplateById (object -> objectId );
1457- break ;
1458-
14591461 case OCLASS_TSCONFIG :
14601462 RemoveTSConfigurationById (object -> objectId );
14611463 break ;
14621464
1463- /*
1464- * OCLASS_ROLE, OCLASS_DATABASE, OCLASS_TBLSPACE intentionally not
1465- * handled here
1466- */
1467-
1468- case OCLASS_FDW :
1469- RemoveForeignDataWrapperById (object -> objectId );
1470- break ;
1471-
1472- case OCLASS_FOREIGN_SERVER :
1473- RemoveForeignServerById (object -> objectId );
1474- break ;
1475-
1476- case OCLASS_USER_MAPPING :
1477- RemoveUserMappingById (object -> objectId );
1478- break ;
1479-
1480- case OCLASS_DEFACL :
1481- RemoveDefaultACLById (object -> objectId );
1482- break ;
1483-
14841465 case OCLASS_EXTENSION :
14851466 RemoveExtensionById (object -> objectId );
14861467 break ;
14871468
1488- case OCLASS_EVENT_TRIGGER :
1489- RemoveEventTriggerById (object -> objectId );
1490- break ;
1491-
14921469 case OCLASS_POLICY :
14931470 RemovePolicyById (object -> objectId );
14941471 break ;
14951472
1496- case OCLASS_PUBLICATION :
1497- RemovePublicationById (object -> objectId );
1498- break ;
1499-
15001473 case OCLASS_PUBLICATION_REL :
15011474 RemovePublicationRelById (object -> objectId );
15021475 break ;
15031476
1477+ case OCLASS_CAST :
1478+ case OCLASS_COLLATION :
1479+ case OCLASS_CONVERSION :
1480+ case OCLASS_LANGUAGE :
1481+ case OCLASS_OPCLASS :
1482+ case OCLASS_OPFAMILY :
1483+ case OCLASS_AM :
1484+ case OCLASS_AMOP :
1485+ case OCLASS_AMPROC :
1486+ case OCLASS_SCHEMA :
1487+ case OCLASS_TSPARSER :
1488+ case OCLASS_TSDICT :
1489+ case OCLASS_TSTEMPLATE :
1490+ case OCLASS_FDW :
1491+ case OCLASS_FOREIGN_SERVER :
1492+ case OCLASS_USER_MAPPING :
1493+ case OCLASS_DEFACL :
1494+ case OCLASS_EVENT_TRIGGER :
1495+ case OCLASS_PUBLICATION :
15041496 case OCLASS_TRANSFORM :
1505- DropTransformById (object -> objectId );
1497+ DropObjectById (object );
15061498 break ;
15071499
15081500 /*
0 commit comments