summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2017-02-01 21:13:30 +0000
committerTom Lane2017-02-01 21:13:30 +0000
commitab02896510e26e46b830c87eef2c03dd3c52c09e (patch)
tree7fa1029a989330f411bae9b018f1350ccefc90ac
parentbbd8550bce146f86e5e883f1232292a975c314fb (diff)
Provide CatalogTupleDelete() as a wrapper around simple_heap_delete().
This extends the work done in commit 2f5c9d9c9 to provide a more nearly complete abstraction layer hiding the details of index updating for catalog changes. That commit only invented abstractions for catalog inserts and updates, leaving nearby code for catalog deletes still calling the heap-level routines directly. That seems rather ugly from here, and it does little to help if we ever want to shift to a storage system in which indexing work is needed at delete time. Hence, create a wrapper function CatalogTupleDelete(), and replace calls of simple_heap_delete() on catalog tuples with it. There are now very few direct calls of [simple_]heap_delete remaining in the tree. Discussion: https://postgr.es/m/[email protected]
-rw-r--r--src/backend/catalog/aclchk.c6
-rw-r--r--src/backend/catalog/dependency.c4
-rw-r--r--src/backend/catalog/heap.c18
-rw-r--r--src/backend/catalog/index.c2
-rw-r--r--src/backend/catalog/indexing.c16
-rw-r--r--src/backend/catalog/pg_collation.c2
-rw-r--r--src/backend/catalog/pg_constraint.c2
-rw-r--r--src/backend/catalog/pg_conversion.c2
-rw-r--r--src/backend/catalog/pg_db_role_setting.c6
-rw-r--r--src/backend/catalog/pg_depend.c6
-rw-r--r--src/backend/catalog/pg_enum.c2
-rw-r--r--src/backend/catalog/pg_largeobject.c4
-rw-r--r--src/backend/catalog/pg_range.c2
-rw-r--r--src/backend/catalog/pg_shdepend.c6
-rw-r--r--src/backend/commands/amcmds.c2
-rw-r--r--src/backend/commands/comment.c8
-rw-r--r--src/backend/commands/dbcommands.c2
-rw-r--r--src/backend/commands/event_trigger.c2
-rw-r--r--src/backend/commands/extension.c2
-rw-r--r--src/backend/commands/foreigncmds.c6
-rw-r--r--src/backend/commands/functioncmds.c8
-rw-r--r--src/backend/commands/opclasscmds.c8
-rw-r--r--src/backend/commands/operatorcmds.c2
-rw-r--r--src/backend/commands/policy.c2
-rw-r--r--src/backend/commands/proclang.c2
-rw-r--r--src/backend/commands/publicationcmds.c5
-rw-r--r--src/backend/commands/schemacmds.c2
-rw-r--r--src/backend/commands/seclabel.c8
-rw-r--r--src/backend/commands/sequence.c2
-rw-r--r--src/backend/commands/subscriptioncmds.c2
-rw-r--r--src/backend/commands/tablecmds.c6
-rw-r--r--src/backend/commands/tablespace.c2
-rw-r--r--src/backend/commands/trigger.c2
-rw-r--r--src/backend/commands/tsearchcmds.c14
-rw-r--r--src/backend/commands/typecmds.c2
-rw-r--r--src/backend/commands/user.c8
-rw-r--r--src/backend/replication/logical/origin.c2
-rw-r--r--src/backend/rewrite/rewriteRemove.c2
-rw-r--r--src/backend/storage/large_object/inv_api.c4
-rw-r--r--src/include/catalog/indexing.h1
40 files changed, 101 insertions, 83 deletions
diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c
index e73226dc81..79b7fd5370 100644
--- a/src/backend/catalog/aclchk.c
+++ b/src/backend/catalog/aclchk.c
@@ -1470,7 +1470,7 @@ RemoveDefaultACLById(Oid defaclOid)
if (!HeapTupleIsValid(tuple))
elog(ERROR, "could not find tuple for default ACL %u", defaclOid);
- simple_heap_delete(rel, &tuple->t_self);
+ CatalogTupleDelete(rel, &tuple->t_self);
systable_endscan(scan);
heap_close(rel, RowExclusiveLock);
@@ -5718,8 +5718,10 @@ recordExtensionInitPrivWorker(Oid objoid, Oid classoid, int objsubid, Acl *new_a
CatalogTupleUpdate(relation, &oldtuple->t_self, oldtuple);
}
else
+ {
/* new_acl is NULL, so delete the entry we found. */
- simple_heap_delete(relation, &oldtuple->t_self);
+ CatalogTupleDelete(relation, &oldtuple->t_self);
+ }
}
else
{
diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c
index 1c43af6eff..fc088b2165 100644
--- a/src/backend/catalog/dependency.c
+++ b/src/backend/catalog/dependency.c
@@ -1062,7 +1062,7 @@ deleteOneObject(const ObjectAddress *object, Relation *depRel, int flags)
while (HeapTupleIsValid(tup = systable_getnext(scan)))
{
- simple_heap_delete(*depRel, &tup->t_self);
+ CatalogTupleDelete(*depRel, &tup->t_self);
}
systable_endscan(scan);
@@ -2467,7 +2467,7 @@ DeleteInitPrivs(const ObjectAddress *object)
NULL, 3, key);
while (HeapTupleIsValid(oldtuple = systable_getnext(scan)))
- simple_heap_delete(relation, &oldtuple->t_self);
+ CatalogTupleDelete(relation, &oldtuple->t_self);
systable_endscan(scan);
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index cb6b6eb46c..a674401e46 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -1417,7 +1417,7 @@ RelationRemoveInheritance(Oid relid)
NULL, 1, &key);
while (HeapTupleIsValid(tuple = systable_getnext(scan)))
- simple_heap_delete(catalogRelation, &tuple->t_self);
+ CatalogTupleDelete(catalogRelation, &tuple->t_self);
systable_endscan(scan);
heap_close(catalogRelation, RowExclusiveLock);
@@ -1445,7 +1445,7 @@ DeleteRelationTuple(Oid relid)
elog(ERROR, "cache lookup failed for relation %u", relid);
/* delete the relation tuple from pg_class, and finish up */
- simple_heap_delete(pg_class_desc, &tup->t_self);
+ CatalogTupleDelete(pg_class_desc, &tup->t_self);
ReleaseSysCache(tup);
@@ -1482,7 +1482,7 @@ DeleteAttributeTuples(Oid relid)
/* Delete all the matching tuples */
while ((atttup = systable_getnext(scan)) != NULL)
- simple_heap_delete(attrel, &atttup->t_self);
+ CatalogTupleDelete(attrel, &atttup->t_self);
/* Clean up after the scan */
systable_endscan(scan);
@@ -1523,7 +1523,7 @@ DeleteSystemAttributeTuples(Oid relid)
/* Delete all the matching tuples */
while ((atttup = systable_getnext(scan)) != NULL)
- simple_heap_delete(attrel, &atttup->t_self);
+ CatalogTupleDelete(attrel, &atttup->t_self);
/* Clean up after the scan */
systable_endscan(scan);
@@ -1570,7 +1570,7 @@ RemoveAttributeById(Oid relid, AttrNumber attnum)
{
/* System attribute (probably OID) ... just delete the row */
- simple_heap_delete(attr_rel, &tuple->t_self);
+ CatalogTupleDelete(attr_rel, &tuple->t_self);
}
else
{
@@ -1715,7 +1715,7 @@ RemoveAttrDefaultById(Oid attrdefId)
myrel = relation_open(myrelid, AccessExclusiveLock);
/* Now we can delete the pg_attrdef row */
- simple_heap_delete(attrdef_rel, &tuple->t_self);
+ CatalogTupleDelete(attrdef_rel, &tuple->t_self);
systable_endscan(scan);
heap_close(attrdef_rel, RowExclusiveLock);
@@ -1809,7 +1809,7 @@ heap_drop_with_catalog(Oid relid)
if (!HeapTupleIsValid(tuple))
elog(ERROR, "cache lookup failed for foreign table %u", relid);
- simple_heap_delete(rel, &tuple->t_self);
+ CatalogTupleDelete(rel, &tuple->t_self);
ReleaseSysCache(tuple);
heap_close(rel, RowExclusiveLock);
@@ -2764,7 +2764,7 @@ RemoveStatistics(Oid relid, AttrNumber attnum)
/* we must loop even when attnum != 0, in case of inherited stats */
while (HeapTupleIsValid(tuple = systable_getnext(scan)))
- simple_heap_delete(pgstatistic, &tuple->t_self);
+ CatalogTupleDelete(pgstatistic, &tuple->t_self);
systable_endscan(scan);
@@ -3196,7 +3196,7 @@ RemovePartitionKeyByRelId(Oid relid)
elog(ERROR, "cache lookup failed for partition key of relation %u",
relid);
- simple_heap_delete(rel, &tuple->t_self);
+ CatalogTupleDelete(rel, &tuple->t_self);
ReleaseSysCache(tuple);
heap_close(rel, RowExclusiveLock);
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 618e170b6b..815a694cfc 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -1573,7 +1573,7 @@ index_drop(Oid indexId, bool concurrent)
hasexprs = !heap_attisnull(tuple, Anum_pg_index_indexprs);
- simple_heap_delete(indexRelation, &tuple->t_self);
+ CatalogTupleDelete(indexRelation, &tuple->t_self);
ReleaseSysCache(tuple);
heap_close(indexRelation, RowExclusiveLock);
diff --git a/src/backend/catalog/indexing.c b/src/backend/catalog/indexing.c
index c26765ab00..02f64813ec 100644
--- a/src/backend/catalog/indexing.c
+++ b/src/backend/catalog/indexing.c
@@ -192,3 +192,19 @@ CatalogTupleUpdate(Relation heapRel, ItemPointer otid, HeapTuple tup)
CatalogIndexInsert(indstate, tup);
CatalogCloseIndexes(indstate);
}
+
+/*
+ * CatalogTupleDelete - do heap and indexing work for deleting a catalog tuple
+ *
+ * Delete the tuple identified by tid in the specified catalog.
+ *
+ * With Postgres heaps, there is no index work to do at deletion time;
+ * cleanup will be done later by VACUUM. However, callers of this function
+ * shouldn't have to know that; we'd like a uniform abstraction for all
+ * catalog tuple changes. Hence, provide this currently-trivial wrapper.
+ */
+void
+CatalogTupleDelete(Relation heapRel, ItemPointer tid)
+{
+ simple_heap_delete(heapRel, tid);
+}
diff --git a/src/backend/catalog/pg_collation.c b/src/backend/catalog/pg_collation.c
index 686d392123..65b6051c0d 100644
--- a/src/backend/catalog/pg_collation.c
+++ b/src/backend/catalog/pg_collation.c
@@ -191,7 +191,7 @@ RemoveCollationById(Oid collationOid)
tuple = systable_getnext(scandesc);
if (HeapTupleIsValid(tuple))
- simple_heap_delete(rel, &tuple->t_self);
+ CatalogTupleDelete(rel, &tuple->t_self);
else
elog(ERROR, "could not find tuple for collation %u", collationOid);
diff --git a/src/backend/catalog/pg_constraint.c b/src/backend/catalog/pg_constraint.c
index cf43f7e29b..62be80d800 100644
--- a/src/backend/catalog/pg_constraint.c
+++ b/src/backend/catalog/pg_constraint.c
@@ -604,7 +604,7 @@ RemoveConstraintById(Oid conId)
elog(ERROR, "constraint %u is not of a known type", conId);
/* Fry the constraint itself */
- simple_heap_delete(conDesc, &tup->t_self);
+ CatalogTupleDelete(conDesc, &tup->t_self);
/* Clean up */
ReleaseSysCache(tup);
diff --git a/src/backend/catalog/pg_conversion.c b/src/backend/catalog/pg_conversion.c
index d1e2b93086..5746dc349a 100644
--- a/src/backend/catalog/pg_conversion.c
+++ b/src/backend/catalog/pg_conversion.c
@@ -165,7 +165,7 @@ RemoveConversionById(Oid conversionOid)
/* search for the target tuple */
if (HeapTupleIsValid(tuple = heap_getnext(scan, ForwardScanDirection)))
- simple_heap_delete(rel, &tuple->t_self);
+ CatalogTupleDelete(rel, &tuple->t_self);
else
elog(ERROR, "could not find tuple for conversion %u", conversionOid);
heap_endscan(scan);
diff --git a/src/backend/catalog/pg_db_role_setting.c b/src/backend/catalog/pg_db_role_setting.c
index 3dfe9ac5a7..323471bc83 100644
--- a/src/backend/catalog/pg_db_role_setting.c
+++ b/src/backend/catalog/pg_db_role_setting.c
@@ -91,7 +91,7 @@ AlterSetting(Oid databaseid, Oid roleid, VariableSetStmt *setstmt)
CatalogTupleUpdate(rel, &tuple->t_self, newtuple);
}
else
- simple_heap_delete(rel, &tuple->t_self);
+ CatalogTupleDelete(rel, &tuple->t_self);
}
}
else if (HeapTupleIsValid(tuple))
@@ -129,7 +129,7 @@ AlterSetting(Oid databaseid, Oid roleid, VariableSetStmt *setstmt)
CatalogTupleUpdate(rel, &tuple->t_self, newtuple);
}
else
- simple_heap_delete(rel, &tuple->t_self);
+ CatalogTupleDelete(rel, &tuple->t_self);
}
else if (valuestr)
{
@@ -199,7 +199,7 @@ DropSetting(Oid databaseid, Oid roleid)
scan = heap_beginscan_catalog(relsetting, numkeys, keys);
while (HeapTupleIsValid(tup = heap_getnext(scan, ForwardScanDirection)))
{
- simple_heap_delete(relsetting, &tup->t_self);
+ CatalogTupleDelete(relsetting, &tup->t_self);
}
heap_endscan(scan);
diff --git a/src/backend/catalog/pg_depend.c b/src/backend/catalog/pg_depend.c
index e114a9cdfe..722df67bda 100644
--- a/src/backend/catalog/pg_depend.c
+++ b/src/backend/catalog/pg_depend.c
@@ -219,7 +219,7 @@ deleteDependencyRecordsFor(Oid classId, Oid objectId,
((Form_pg_depend) GETSTRUCT(tup))->deptype == DEPENDENCY_EXTENSION)
continue;
- simple_heap_delete(depRel, &tup->t_self);
+ CatalogTupleDelete(depRel, &tup->t_self);
count++;
}
@@ -269,7 +269,7 @@ deleteDependencyRecordsForClass(Oid classId, Oid objectId,
if (depform->refclassid == refclassId && depform->deptype == deptype)
{
- simple_heap_delete(depRel, &tup->t_self);
+ CatalogTupleDelete(depRel, &tup->t_self);
count++;
}
}
@@ -353,7 +353,7 @@ changeDependencyFor(Oid classId, Oid objectId,
depform->refobjid == oldRefObjectId)
{
if (newIsPinned)
- simple_heap_delete(depRel, &tup->t_self);
+ CatalogTupleDelete(depRel, &tup->t_self);
else
{
/* make a modifiable copy */
diff --git a/src/backend/catalog/pg_enum.c b/src/backend/catalog/pg_enum.c
index 1fc6f7c6b4..a7d933663e 100644
--- a/src/backend/catalog/pg_enum.c
+++ b/src/backend/catalog/pg_enum.c
@@ -161,7 +161,7 @@ EnumValuesDelete(Oid enumTypeOid)
while (HeapTupleIsValid(tup = systable_getnext(scan)))
{
- simple_heap_delete(pg_enum, &tup->t_self);
+ CatalogTupleDelete(pg_enum, &tup->t_self);
}
systable_endscan(scan);
diff --git a/src/backend/catalog/pg_largeobject.c b/src/backend/catalog/pg_largeobject.c
index 754ad9f79c..fc4f4f8c9b 100644
--- a/src/backend/catalog/pg_largeobject.c
+++ b/src/backend/catalog/pg_largeobject.c
@@ -110,7 +110,7 @@ LargeObjectDrop(Oid loid)
(errcode(ERRCODE_UNDEFINED_OBJECT),
errmsg("large object %u does not exist", loid)));
- simple_heap_delete(pg_lo_meta, &tuple->t_self);
+ CatalogTupleDelete(pg_lo_meta, &tuple->t_self);
systable_endscan(scan);
@@ -127,7 +127,7 @@ LargeObjectDrop(Oid loid)
NULL, 1, skey);
while (HeapTupleIsValid(tuple = systable_getnext(scan)))
{
- simple_heap_delete(pg_largeobject, &tuple->t_self);
+ CatalogTupleDelete(pg_largeobject, &tuple->t_self);
}
systable_endscan(scan);
diff --git a/src/backend/catalog/pg_range.c b/src/backend/catalog/pg_range.c
index fcbf374bd6..a3b0fb8838 100644
--- a/src/backend/catalog/pg_range.c
+++ b/src/backend/catalog/pg_range.c
@@ -129,7 +129,7 @@ RangeDelete(Oid rangeTypeOid)
while (HeapTupleIsValid(tup = systable_getnext(scan)))
{
- simple_heap_delete(pg_range, &tup->t_self);
+ CatalogTupleDelete(pg_range, &tup->t_self);
}
systable_endscan(scan);
diff --git a/src/backend/catalog/pg_shdepend.c b/src/backend/catalog/pg_shdepend.c
index 4b68e05e51..ef50b854d4 100644
--- a/src/backend/catalog/pg_shdepend.c
+++ b/src/backend/catalog/pg_shdepend.c
@@ -249,7 +249,7 @@ shdepChangeDep(Relation sdepRel,
{
/* No new entry needed, so just delete existing entry if any */
if (oldtup)
- simple_heap_delete(sdepRel, &oldtup->t_self);
+ CatalogTupleDelete(sdepRel, &oldtup->t_self);
}
else if (oldtup)
{
@@ -795,7 +795,7 @@ dropDatabaseDependencies(Oid databaseId)
while (HeapTupleIsValid(tup = systable_getnext(scan)))
{
- simple_heap_delete(sdepRel, &tup->t_self);
+ CatalogTupleDelete(sdepRel, &tup->t_self);
}
systable_endscan(scan);
@@ -948,7 +948,7 @@ shdepDropDependency(Relation sdepRel,
continue;
/* OK, delete it */
- simple_heap_delete(sdepRel, &tup->t_self);
+ CatalogTupleDelete(sdepRel, &tup->t_self);
}
systable_endscan(scan);
diff --git a/src/backend/commands/amcmds.c b/src/backend/commands/amcmds.c
index b6e60469f3..225e6f636c 100644
--- a/src/backend/commands/amcmds.c
+++ b/src/backend/commands/amcmds.c
@@ -128,7 +128,7 @@ RemoveAccessMethodById(Oid amOid)
if (!HeapTupleIsValid(tup))
elog(ERROR, "cache lookup failed for access method %u", amOid);
- simple_heap_delete(relation, &tup->t_self);
+ CatalogTupleDelete(relation, &tup->t_self);
ReleaseSysCache(tup);
diff --git a/src/backend/commands/comment.c b/src/backend/commands/comment.c
index 8a437de815..87ca62f240 100644
--- a/src/backend/commands/comment.c
+++ b/src/backend/commands/comment.c
@@ -194,7 +194,7 @@ CreateComments(Oid oid, Oid classoid, int32 subid, char *comment)
/* Found the old tuple, so delete or update it */
if (comment == NULL)
- simple_heap_delete(description, &oldtuple->t_self);
+ CatalogTupleDelete(description, &oldtuple->t_self);
else
{
newtuple = heap_modify_tuple(oldtuple, RelationGetDescr(description), values,
@@ -284,7 +284,7 @@ CreateSharedComments(Oid oid, Oid classoid, char *comment)
/* Found the old tuple, so delete or update it */
if (comment == NULL)
- simple_heap_delete(shdescription, &oldtuple->t_self);
+ CatalogTupleDelete(shdescription, &oldtuple->t_self);
else
{
newtuple = heap_modify_tuple(oldtuple, RelationGetDescr(shdescription),
@@ -358,7 +358,7 @@ DeleteComments(Oid oid, Oid classoid, int32 subid)
NULL, nkeys, skey);
while ((oldtuple = systable_getnext(sd)) != NULL)
- simple_heap_delete(description, &oldtuple->t_self);
+ CatalogTupleDelete(description, &oldtuple->t_self);
/* Done */
@@ -394,7 +394,7 @@ DeleteSharedComments(Oid oid, Oid classoid)
NULL, 2, skey);
while ((oldtuple = systable_getnext(sd)) != NULL)
- simple_heap_delete(shdescription, &oldtuple->t_self);
+ CatalogTupleDelete(shdescription, &oldtuple->t_self);
/* Done */
diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c
index c3eb3c79df..30000a1eeb 100644
--- a/src/backend/commands/dbcommands.c
+++ b/src/backend/commands/dbcommands.c
@@ -895,7 +895,7 @@ dropdb(const char *dbname, bool missing_ok)
if (!HeapTupleIsValid(tup))
elog(ERROR, "cache lookup failed for database %u", db_id);
- simple_heap_delete(pgdbrel, &tup->t_self);
+ CatalogTupleDelete(pgdbrel, &tup->t_self);
ReleaseSysCache(tup);
diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c
index 94c4ea5dd2..346b347ae1 100644
--- a/src/backend/commands/event_trigger.c
+++ b/src/backend/commands/event_trigger.c
@@ -484,7 +484,7 @@ RemoveEventTriggerById(Oid trigOid)
if (!HeapTupleIsValid(tup))
elog(ERROR, "cache lookup failed for event trigger %u", trigOid);
- simple_heap_delete(tgrel, &tup->t_self);
+ CatalogTupleDelete(tgrel, &tup->t_self);
ReleaseSysCache(tup);
diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index 14738ea584..325f5b74b8 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -1854,7 +1854,7 @@ RemoveExtensionById(Oid extId)
/* We assume that there can be at most one matching tuple */
if (HeapTupleIsValid(tuple))
- simple_heap_delete(rel, &tuple->t_self);
+ CatalogTupleDelete(rel, &tuple->t_self);
systable_endscan(scandesc);
diff --git a/src/backend/commands/foreigncmds.c b/src/backend/commands/foreigncmds.c
index ad8ca2d8eb..d5d40e6239 100644
--- a/src/backend/commands/foreigncmds.c
+++ b/src/backend/commands/foreigncmds.c
@@ -846,7 +846,7 @@ RemoveForeignDataWrapperById(Oid fdwId)
if (!HeapTupleIsValid(tp))
elog(ERROR, "cache lookup failed for foreign-data wrapper %u", fdwId);
- simple_heap_delete(rel, &tp->t_self);
+ CatalogTupleDelete(rel, &tp->t_self);
ReleaseSysCache(tp);
@@ -1080,7 +1080,7 @@ RemoveForeignServerById(Oid srvId)
if (!HeapTupleIsValid(tp))
elog(ERROR, "cache lookup failed for foreign server %u", srvId);
- simple_heap_delete(rel, &tp->t_self);
+ CatalogTupleDelete(rel, &tp->t_self);
ReleaseSysCache(tp);
@@ -1403,7 +1403,7 @@ RemoveUserMappingById(Oid umId)
if (!HeapTupleIsValid(tp))
elog(ERROR, "cache lookup failed for user mapping %u", umId);
- simple_heap_delete(rel, &tp->t_self);
+ CatalogTupleDelete(rel, &tp->t_self);
ReleaseSysCache(tp);
diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c
index f4fa8d35a4..dd83858b3d 100644
--- a/src/backend/commands/functioncmds.c
+++ b/src/backend/commands/functioncmds.c
@@ -1131,7 +1131,7 @@ RemoveFunctionById(Oid funcOid)
isagg = ((Form_pg_proc) GETSTRUCT(tup))->proisagg;
- simple_heap_delete(relation, &tup->t_self);
+ CatalogTupleDelete(relation, &tup->t_self);
ReleaseSysCache(tup);
@@ -1148,7 +1148,7 @@ RemoveFunctionById(Oid funcOid)
if (!HeapTupleIsValid(tup)) /* should not happen */
elog(ERROR, "cache lookup failed for pg_aggregate tuple for function %u", funcOid);
- simple_heap_delete(relation, &tup->t_self);
+ CatalogTupleDelete(relation, &tup->t_self);
ReleaseSysCache(tup);
@@ -1735,7 +1735,7 @@ DropCastById(Oid castOid)
tuple = systable_getnext(scan);
if (!HeapTupleIsValid(tuple))
elog(ERROR, "could not find tuple for cast %u", castOid);
- simple_heap_delete(relation, &tuple->t_self);
+ CatalogTupleDelete(relation, &tuple->t_self);
systable_endscan(scan);
heap_close(relation, RowExclusiveLock);
@@ -2021,7 +2021,7 @@ DropTransformById(Oid transformOid)
tuple = systable_getnext(scan);
if (!HeapTupleIsValid(tuple))
elog(ERROR, "could not find tuple for transform %u", transformOid);
- simple_heap_delete(relation, &tuple->t_self);
+ CatalogTupleDelete(relation, &tuple->t_self);
systable_endscan(scan);
heap_close(relation, RowExclusiveLock);
diff --git a/src/backend/commands/opclasscmds.c b/src/backend/commands/opclasscmds.c
index 99a39bdd74..5f2364bccf 100644
--- a/src/backend/commands/opclasscmds.c
+++ b/src/backend/commands/opclasscmds.c
@@ -1571,7 +1571,7 @@ RemoveOpFamilyById(Oid opfamilyOid)
if (!HeapTupleIsValid(tup)) /* should not happen */
elog(ERROR, "cache lookup failed for opfamily %u", opfamilyOid);
- simple_heap_delete(rel, &tup->t_self);
+ CatalogTupleDelete(rel, &tup->t_self);
ReleaseSysCache(tup);
@@ -1590,7 +1590,7 @@ RemoveOpClassById(Oid opclassOid)
if (!HeapTupleIsValid(tup)) /* should not happen */
elog(ERROR, "cache lookup failed for opclass %u", opclassOid);
- simple_heap_delete(rel, &tup->t_self);
+ CatalogTupleDelete(rel, &tup->t_self);
ReleaseSysCache(tup);
@@ -1620,7 +1620,7 @@ RemoveAmOpEntryById(Oid entryOid)
if (!HeapTupleIsValid(tup))
elog(ERROR, "could not find tuple for amop entry %u", entryOid);
- simple_heap_delete(rel, &tup->t_self);
+ CatalogTupleDelete(rel, &tup->t_self);
systable_endscan(scan);
heap_close(rel, RowExclusiveLock);
@@ -1649,7 +1649,7 @@ RemoveAmProcEntryById(Oid entryOid)
if (!HeapTupleIsValid(tup))
elog(ERROR, "could not find tuple for amproc entry %u", entryOid);
- simple_heap_delete(rel, &tup->t_self);
+ CatalogTupleDelete(rel, &tup->t_self);
systable_endscan(scan);
heap_close(rel, RowExclusiveLock);
diff --git a/src/backend/commands/operatorcmds.c b/src/backend/commands/operatorcmds.c
index 66d2452dbe..b063467bbd 100644
--- a/src/backend/commands/operatorcmds.c
+++ b/src/backend/commands/operatorcmds.c
@@ -368,7 +368,7 @@ RemoveOperatorById(Oid operOid)
}
}
- simple_heap_delete(relation, &tup->t_self);
+ CatalogTupleDelete(relation, &tup->t_self);
ReleaseSysCache(tup);
diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c
index da2b1ae0e7..4a758426c3 100644
--- a/src/backend/commands/policy.c
+++ b/src/backend/commands/policy.c
@@ -397,7 +397,7 @@ RemovePolicyById(Oid policy_id)
errmsg("permission denied: \"%s\" is a system catalog",
RelationGetRelationName(rel))));
- simple_heap_delete(pg_policy_rel, &tuple->t_self);
+ CatalogTupleDelete(pg_policy_rel, &tuple->t_self);
systable_endscan(sscan);
diff --git a/src/backend/commands/proclang.c b/src/backend/commands/proclang.c
index 4c8daa5928..a4fbc05a12 100644
--- a/src/backend/commands/proclang.c
+++ b/src/backend/commands/proclang.c
@@ -536,7 +536,7 @@ DropProceduralLanguageById(Oid langOid)
if (!HeapTupleIsValid(langTup)) /* should not happen */
elog(ERROR, "cache lookup failed for language %u", langOid);
- simple_heap_delete(rel, &langTup->t_self);
+ CatalogTupleDelete(rel, &langTup->t_self);
ReleaseSysCache(langTup);
diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c
index bc0f653991..3fe1d15052 100644
--- a/src/backend/commands/publicationcmds.c
+++ b/src/backend/commands/publicationcmds.c
@@ -461,7 +461,7 @@ RemovePublicationById(Oid pubid)
if (!HeapTupleIsValid(tup))
elog(ERROR, "cache lookup failed for publication %u", pubid);
- simple_heap_delete(rel, &tup->t_self);
+ CatalogTupleDelete(rel, &tup->t_self);
ReleaseSysCache(tup);
@@ -486,13 +486,12 @@ RemovePublicationRelById(Oid proid)
elog(ERROR, "cache lookup failed for publication table %u",
proid);
-
pubrel = (Form_pg_publication_rel) GETSTRUCT(tup);
/* Invalidate relcache so that publication info is rebuilt. */
CacheInvalidateRelcacheByRelid(pubrel->prrelid);
- simple_heap_delete(rel, &tup->t_self);
+ CatalogTupleDelete(rel, &tup->t_self);
ReleaseSysCache(tup);
diff --git a/src/backend/commands/schemacmds.c b/src/backend/commands/schemacmds.c
index d14c269803..722b965d65 100644
--- a/src/backend/commands/schemacmds.c
+++ b/src/backend/commands/schemacmds.c
@@ -226,7 +226,7 @@ RemoveSchemaById(Oid schemaOid)
if (!HeapTupleIsValid(tup)) /* should not happen */
elog(ERROR, "cache lookup failed for namespace %u", schemaOid);
- simple_heap_delete(relation, &tup->t_self);
+ CatalogTupleDelete(relation, &tup->t_self);
ReleaseSysCache(tup);
diff --git a/src/backend/commands/seclabel.c b/src/backend/commands/seclabel.c
index 506c90f6e2..422da8b6b0 100644
--- a/src/backend/commands/seclabel.c
+++ b/src/backend/commands/seclabel.c
@@ -293,7 +293,7 @@ SetSharedSecurityLabel(const ObjectAddress *object,
if (HeapTupleIsValid(oldtup))
{
if (label == NULL)
- simple_heap_delete(pg_shseclabel, &oldtup->t_self);
+ CatalogTupleDelete(pg_shseclabel, &oldtup->t_self);
else
{
replaces[Anum_pg_shseclabel_label - 1] = true;
@@ -380,7 +380,7 @@ SetSecurityLabel(const ObjectAddress *object,
if (HeapTupleIsValid(oldtup))
{
if (label == NULL)
- simple_heap_delete(pg_seclabel, &oldtup->t_self);
+ CatalogTupleDelete(pg_seclabel, &oldtup->t_self);
else
{
replaces[Anum_pg_seclabel_label - 1] = true;
@@ -432,7 +432,7 @@ DeleteSharedSecurityLabel(Oid objectId, Oid classId)
scan = systable_beginscan(pg_shseclabel, SharedSecLabelObjectIndexId, true,
NULL, 2, skey);
while (HeapTupleIsValid(oldtup = systable_getnext(scan)))
- simple_heap_delete(pg_shseclabel, &oldtup->t_self);
+ CatalogTupleDelete(pg_shseclabel, &oldtup->t_self);
systable_endscan(scan);
heap_close(pg_shseclabel, RowExclusiveLock);
@@ -483,7 +483,7 @@ DeleteSecurityLabel(const ObjectAddress *object)
scan = systable_beginscan(pg_seclabel, SecLabelObjectIndexId, true,
NULL, nkeys, skey);
while (HeapTupleIsValid(oldtup = systable_getnext(scan)))
- simple_heap_delete(pg_seclabel, &oldtup->t_self);
+ CatalogTupleDelete(pg_seclabel, &oldtup->t_self);
systable_endscan(scan);
heap_close(pg_seclabel, RowExclusiveLock);
diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c
index 6ac76b1e56..c148b09cd7 100644
--- a/src/backend/commands/sequence.c
+++ b/src/backend/commands/sequence.c
@@ -521,7 +521,7 @@ DeleteSequenceTuple(Oid relid)
if (!HeapTupleIsValid(tuple))
elog(ERROR, "cache lookup failed for sequence %u", relid);
- simple_heap_delete(rel, &tuple->t_self);
+ CatalogTupleDelete(rel, &tuple->t_self);
ReleaseSysCache(tuple);
heap_close(rel, RowExclusiveLock);
diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c
index 5de999928f..3b70807565 100644
--- a/src/backend/commands/subscriptioncmds.c
+++ b/src/backend/commands/subscriptioncmds.c
@@ -501,7 +501,7 @@ DropSubscription(DropSubscriptionStmt *stmt)
EventTriggerSQLDropAddObject(&myself, true, true);
/* Remove the tuple from catalog. */
- simple_heap_delete(rel, &tup->t_self);
+ CatalogTupleDelete(rel, &tup->t_self);
ReleaseSysCache(tup);
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 764071bd11..878b48d39e 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -8939,7 +8939,7 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
foundDep->refobjid == attTup->attcollation))
elog(ERROR, "found unexpected dependency for column");
- simple_heap_delete(depRel, &depTup->t_self);
+ CatalogTupleDelete(depRel, &depTup->t_self);
}
systable_endscan(scan);
@@ -11177,7 +11177,7 @@ RemoveInheritance(Relation child_rel, Relation parent_rel)
inhparent = ((Form_pg_inherits) GETSTRUCT(inheritsTuple))->inhparent;
if (inhparent == RelationGetRelid(parent_rel))
{
- simple_heap_delete(catalogRelation, &inheritsTuple->t_self);
+ CatalogTupleDelete(catalogRelation, &inheritsTuple->t_self);
found = true;
break;
}
@@ -11370,7 +11370,7 @@ drop_parent_dependency(Oid relid, Oid refclassid, Oid refobjid)
dep->refobjid == refobjid &&
dep->refobjsubid == 0 &&
dep->deptype == DEPENDENCY_NORMAL)
- simple_heap_delete(catalogRelation, &depTuple->t_self);
+ CatalogTupleDelete(catalogRelation, &depTuple->t_self);
}
systable_endscan(scan);
diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c
index 6e652aa66b..80515bae19 100644
--- a/src/backend/commands/tablespace.c
+++ b/src/backend/commands/tablespace.c
@@ -460,7 +460,7 @@ DropTableSpace(DropTableSpaceStmt *stmt)
/*
* Remove the pg_tablespace tuple (this will roll back if we fail below)
*/
- simple_heap_delete(rel, &tuple->t_self);
+ CatalogTupleDelete(rel, &tuple->t_self);
heap_endscan(scandesc);
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index b3e89a44f7..d80bff671c 100644
--- a/src/backend/commands/trigger.c
+++ b/src/backend/commands/trigger.c
@@ -1238,7 +1238,7 @@ RemoveTriggerById(Oid trigOid)
/*
* Delete the pg_trigger tuple.
*/
- simple_heap_delete(tgrel, &tup->t_self);
+ CatalogTupleDelete(tgrel, &tup->t_self);
systable_endscan(tgscan);
heap_close(tgrel, RowExclusiveLock);
diff --git a/src/backend/commands/tsearchcmds.c b/src/backend/commands/tsearchcmds.c
index 988930b1c5..49668be0d7 100644
--- a/src/backend/commands/tsearchcmds.c
+++ b/src/backend/commands/tsearchcmds.c
@@ -301,7 +301,7 @@ RemoveTSParserById(Oid prsId)
if (!HeapTupleIsValid(tup))
elog(ERROR, "cache lookup failed for text search parser %u", prsId);
- simple_heap_delete(relation, &tup->t_self);
+ CatalogTupleDelete(relation, &tup->t_self);
ReleaseSysCache(tup);
@@ -511,7 +511,7 @@ RemoveTSDictionaryById(Oid dictId)
elog(ERROR, "cache lookup failed for text search dictionary %u",
dictId);
- simple_heap_delete(relation, &tup->t_self);
+ CatalogTupleDelete(relation, &tup->t_self);
ReleaseSysCache(tup);
@@ -831,7 +831,7 @@ RemoveTSTemplateById(Oid tmplId)
elog(ERROR, "cache lookup failed for text search template %u",
tmplId);
- simple_heap_delete(relation, &tup->t_self);
+ CatalogTupleDelete(relation, &tup->t_self);
ReleaseSysCache(tup);
@@ -1139,7 +1139,7 @@ RemoveTSConfigurationById(Oid cfgId)
elog(ERROR, "cache lookup failed for text search dictionary %u",
cfgId);
- simple_heap_delete(relCfg, &tup->t_self);
+ CatalogTupleDelete(relCfg, &tup->t_self);
ReleaseSysCache(tup);
@@ -1158,7 +1158,7 @@ RemoveTSConfigurationById(Oid cfgId)
while (HeapTupleIsValid((tup = systable_getnext(scan))))
{
- simple_heap_delete(relMap, &tup->t_self);
+ CatalogTupleDelete(relMap, &tup->t_self);
}
systable_endscan(scan);
@@ -1317,7 +1317,7 @@ MakeConfigurationMapping(AlterTSConfigurationStmt *stmt,
while (HeapTupleIsValid((maptup = systable_getnext(scan))))
{
- simple_heap_delete(relMap, &maptup->t_self);
+ CatalogTupleDelete(relMap, &maptup->t_self);
}
systable_endscan(scan);
@@ -1472,7 +1472,7 @@ DropConfigurationMapping(AlterTSConfigurationStmt *stmt,
while (HeapTupleIsValid((maptup = systable_getnext(scan))))
{
- simple_heap_delete(relMap, &maptup->t_self);
+ CatalogTupleDelete(relMap, &maptup->t_self);
found = true;
}
diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c
index b848389ab8..d8bd8a50dd 100644
--- a/src/backend/commands/typecmds.c
+++ b/src/backend/commands/typecmds.c
@@ -697,7 +697,7 @@ RemoveTypeById(Oid typeOid)
if (!HeapTupleIsValid(tup))
elog(ERROR, "cache lookup failed for type %u", typeOid);
- simple_heap_delete(relation, &tup->t_self);
+ CatalogTupleDelete(relation, &tup->t_self);
/*
* If it is an enum, delete the pg_enum entries too; we don't bother with
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index f2ec3b2d0d..994c093250 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -1044,7 +1044,7 @@ DropRole(DropRoleStmt *stmt)
/*
* Remove the role from the pg_authid table
*/
- simple_heap_delete(pg_authid_rel, &tuple->t_self);
+ CatalogTupleDelete(pg_authid_rel, &tuple->t_self);
ReleaseSysCache(tuple);
@@ -1064,7 +1064,7 @@ DropRole(DropRoleStmt *stmt)
while (HeapTupleIsValid(tmp_tuple = systable_getnext(sscan)))
{
- simple_heap_delete(pg_auth_members_rel, &tmp_tuple->t_self);
+ CatalogTupleDelete(pg_auth_members_rel, &tmp_tuple->t_self);
}
systable_endscan(sscan);
@@ -1079,7 +1079,7 @@ DropRole(DropRoleStmt *stmt)
while (HeapTupleIsValid(tmp_tuple = systable_getnext(sscan)))
{
- simple_heap_delete(pg_auth_members_rel, &tmp_tuple->t_self);
+ CatalogTupleDelete(pg_auth_members_rel, &tmp_tuple->t_self);
}
systable_endscan(sscan);
@@ -1606,7 +1606,7 @@ DelRoleMems(const char *rolename, Oid roleid,
if (!admin_opt)
{
/* Remove the entry altogether */
- simple_heap_delete(pg_authmem_rel, &authmem_tuple->t_self);
+ CatalogTupleDelete(pg_authmem_rel, &authmem_tuple->t_self);
}
else
{
diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c
index 7e88f97f08..ade80d407f 100644
--- a/src/backend/replication/logical/origin.c
+++ b/src/backend/replication/logical/origin.c
@@ -377,7 +377,7 @@ replorigin_drop(RepOriginId roident)
elog(ERROR, "cache lookup failed for replication origin with oid %u",
roident);
- simple_heap_delete(rel, &tuple->t_self);
+ CatalogTupleDelete(rel, &tuple->t_self);
ReleaseSysCache(tuple);
CommandCounterIncrement();
diff --git a/src/backend/rewrite/rewriteRemove.c b/src/backend/rewrite/rewriteRemove.c
index 659a311017..e6f5ed575f 100644
--- a/src/backend/rewrite/rewriteRemove.c
+++ b/src/backend/rewrite/rewriteRemove.c
@@ -76,7 +76,7 @@ RemoveRewriteRuleById(Oid ruleOid)
/*
* Now delete the pg_rewrite tuple for the rule
*/
- simple_heap_delete(RewriteRelation, &tuple->t_self);
+ CatalogTupleDelete(RewriteRelation, &tuple->t_self);
systable_endscan(rcscan);
diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c
index 15e1b15483..8eb5b3b08e 100644
--- a/src/backend/storage/large_object/inv_api.c
+++ b/src/backend/storage/large_object/inv_api.c
@@ -861,7 +861,7 @@ inv_truncate(LargeObjectDesc *obj_desc, int64 len)
if (olddata != NULL)
{
Assert(olddata->pageno > pageno);
- simple_heap_delete(lo_heap_r, &oldtuple->t_self);
+ CatalogTupleDelete(lo_heap_r, &oldtuple->t_self);
}
/*
@@ -897,7 +897,7 @@ inv_truncate(LargeObjectDesc *obj_desc, int64 len)
{
while ((oldtuple = systable_getnext_ordered(sd, ForwardScanDirection)) != NULL)
{
- simple_heap_delete(lo_heap_r, &oldtuple->t_self);
+ CatalogTupleDelete(lo_heap_r, &oldtuple->t_self);
}
}
diff --git a/src/include/catalog/indexing.h b/src/include/catalog/indexing.h
index 977dc9c7ca..9d02666ed1 100644
--- a/src/include/catalog/indexing.h
+++ b/src/include/catalog/indexing.h
@@ -35,6 +35,7 @@ extern void CatalogIndexInsert(CatalogIndexState indstate,
extern Oid CatalogTupleInsert(Relation heapRel, HeapTuple tup);
extern void CatalogTupleUpdate(Relation heapRel, ItemPointer otid,
HeapTuple tup);
+extern void CatalogTupleDelete(Relation heapRel, ItemPointer tid);
/*