mirror of
https://github.com/postgres/postgres.git
synced 2025-08-31 17:02:12 +03:00
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/462.1485902736@sss.pgh.pa.us
This commit is contained in:
@@ -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);
|
||||
|
||||
|
@@ -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 */
|
||||
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -368,7 +368,7 @@ RemoveOperatorById(Oid operOid)
|
||||
}
|
||||
}
|
||||
|
||||
simple_heap_delete(relation, &tup->t_self);
|
||||
CatalogTupleDelete(relation, &tup->t_self);
|
||||
|
||||
ReleaseSysCache(tup);
|
||||
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
{
|
||||
|
Reference in New Issue
Block a user