66
66
#include "commands/event_trigger.h"
67
67
#include "commands/extension.h"
68
68
#include "commands/policy.h"
69
- #include "commands/proclang.h"
70
69
#include "commands/publicationcmds.h"
71
- #include "commands/schemacmds.h"
72
70
#include "commands/seclabel.h"
73
71
#include "commands/sequence.h"
74
72
#include "commands/trigger.h"
@@ -1223,6 +1221,62 @@ reportDependentObjects(const ObjectAddresses *targetObjects,
1223
1221
pfree (logdetail .data );
1224
1222
}
1225
1223
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
+
1226
1280
/*
1227
1281
* deleteOneObject: delete a single object for performDeletion.
1228
1282
*
@@ -1376,30 +1430,14 @@ doDeletion(const ObjectAddress *object, int flags)
1376
1430
RemoveTypeById (object -> objectId );
1377
1431
break ;
1378
1432
1379
- case OCLASS_CAST :
1380
- DropCastById (object -> objectId );
1381
- break ;
1382
-
1383
- case OCLASS_COLLATION :
1384
- RemoveCollationById (object -> objectId );
1385
- break ;
1386
-
1387
1433
case OCLASS_CONSTRAINT :
1388
1434
RemoveConstraintById (object -> objectId );
1389
1435
break ;
1390
1436
1391
- case OCLASS_CONVERSION :
1392
- RemoveConversionById (object -> objectId );
1393
- break ;
1394
-
1395
1437
case OCLASS_DEFAULT :
1396
1438
RemoveAttrDefaultById (object -> objectId );
1397
1439
break ;
1398
1440
1399
- case OCLASS_LANGUAGE :
1400
- DropProceduralLanguageById (object -> objectId );
1401
- break ;
1402
-
1403
1441
case OCLASS_LARGEOBJECT :
1404
1442
LargeObjectDrop (object -> objectId );
1405
1443
break ;
@@ -1408,26 +1446,6 @@ doDeletion(const ObjectAddress *object, int flags)
1408
1446
RemoveOperatorById (object -> objectId );
1409
1447
break ;
1410
1448
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
-
1431
1449
case OCLASS_REWRITE :
1432
1450
RemoveRewriteRuleById (object -> objectId );
1433
1451
break ;
@@ -1436,73 +1454,47 @@ doDeletion(const ObjectAddress *object, int flags)
1436
1454
RemoveTriggerById (object -> objectId );
1437
1455
break ;
1438
1456
1439
- case OCLASS_SCHEMA :
1440
- RemoveSchemaById (object -> objectId );
1441
- break ;
1442
-
1443
1457
case OCLASS_STATISTIC_EXT :
1444
1458
RemoveStatisticsById (object -> objectId );
1445
1459
break ;
1446
1460
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
-
1459
1461
case OCLASS_TSCONFIG :
1460
1462
RemoveTSConfigurationById (object -> objectId );
1461
1463
break ;
1462
1464
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
-
1484
1465
case OCLASS_EXTENSION :
1485
1466
RemoveExtensionById (object -> objectId );
1486
1467
break ;
1487
1468
1488
- case OCLASS_EVENT_TRIGGER :
1489
- RemoveEventTriggerById (object -> objectId );
1490
- break ;
1491
-
1492
1469
case OCLASS_POLICY :
1493
1470
RemovePolicyById (object -> objectId );
1494
1471
break ;
1495
1472
1496
- case OCLASS_PUBLICATION :
1497
- RemovePublicationById (object -> objectId );
1498
- break ;
1499
-
1500
1473
case OCLASS_PUBLICATION_REL :
1501
1474
RemovePublicationRelById (object -> objectId );
1502
1475
break ;
1503
1476
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 :
1504
1496
case OCLASS_TRANSFORM :
1505
- DropTransformById (object -> objectId );
1497
+ DropObjectById (object );
1506
1498
break ;
1507
1499
1508
1500
/*
0 commit comments