From 2f5c9d9c9cec436e55847ec580606d7e88067df6 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Tue, 31 Jan 2017 18:42:24 -0300 Subject: [PATCH] Tweak catalog indexing abstraction for upcoming WARM Split the existing CatalogUpdateIndexes into two different routines, CatalogTupleInsert and CatalogTupleUpdate, which do both the heap insert/update plus the index update. This removes over 300 lines of boilerplate code all over src/backend/catalog/ and src/backend/commands. The resulting code is much more pleasing to the eye. Also, by encapsulating what happens in detail during an UPDATE, this facilitates the upcoming WARM patch, which is going to add a few more lines to the update case making the boilerplate even more boring. The original CatalogUpdateIndexes is removed; there was only one use left, and since it's just three lines, we can as well expand it in place there. We could keep it, but WARM is going to break all the UPDATE out-of-core callsites anyway, so there seems to be no benefit in doing so. Author: Pavan Deolasee Discussion: https://www.postgr.es/m/CABOikdOcFYSZ4vA2gYfs=M2cdXzXX4qGHeEiW3fu9PCfkHLa2A@mail.gmail.com --- src/backend/catalog/aclchk.c | 72 ++-------- src/backend/catalog/heap.c | 46 +++--- src/backend/catalog/index.c | 14 +- src/backend/catalog/indexing.c | 44 +++++- src/backend/catalog/pg_aggregate.c | 4 +- src/backend/catalog/pg_collation.c | 5 +- src/backend/catalog/pg_constraint.c | 17 +-- src/backend/catalog/pg_conversion.c | 5 +- src/backend/catalog/pg_db_role_setting.c | 15 +- src/backend/catalog/pg_depend.c | 3 +- src/backend/catalog/pg_enum.c | 13 +- src/backend/catalog/pg_largeobject.c | 4 +- src/backend/catalog/pg_namespace.c | 4 +- src/backend/catalog/pg_operator.c | 17 +-- src/backend/catalog/pg_proc.c | 6 +- src/backend/catalog/pg_publication.c | 3 +- src/backend/catalog/pg_range.c | 3 +- src/backend/catalog/pg_shdepend.c | 20 +-- src/backend/catalog/pg_type.c | 16 +-- src/backend/catalog/toasting.c | 5 +- src/backend/commands/alter.c | 9 +- src/backend/commands/amcmds.c | 3 +- src/backend/commands/analyze.c | 7 +- src/backend/commands/cluster.c | 9 +- src/backend/commands/comment.c | 16 +-- src/backend/commands/dbcommands.c | 21 +-- src/backend/commands/event_trigger.c | 9 +- src/backend/commands/extension.c | 15 +- src/backend/commands/foreigncmds.c | 29 ++-- src/backend/commands/functioncmds.c | 21 +-- src/backend/commands/matview.c | 4 +- src/backend/commands/opclasscmds.c | 16 +-- src/backend/commands/operatorcmds.c | 3 +- src/backend/commands/policy.c | 20 +-- src/backend/commands/proclang.c | 7 +- src/backend/commands/publicationcmds.c | 9 +- src/backend/commands/schemacmds.c | 6 +- src/backend/commands/seclabel.c | 15 +- src/backend/commands/sequence.c | 6 +- src/backend/commands/subscriptioncmds.c | 9 +- src/backend/commands/tablecmds.c | 156 ++++++--------------- src/backend/commands/tablespace.c | 10 +- src/backend/commands/trigger.c | 18 +-- src/backend/commands/tsearchcmds.c | 31 ++-- src/backend/commands/typecmds.c | 18 +-- src/backend/commands/user.c | 21 +-- src/backend/replication/logical/origin.c | 3 +- src/backend/rewrite/rewriteDefine.c | 19 +-- src/backend/rewrite/rewriteSupport.c | 5 +- src/backend/storage/large_object/inv_api.c | 12 +- src/backend/utils/cache/relcache.c | 3 +- src/include/catalog/indexing.h | 4 +- 52 files changed, 256 insertions(+), 594 deletions(-) diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c index 00a9aea556..e73226dc81 100644 --- a/src/backend/catalog/aclchk.c +++ b/src/backend/catalog/aclchk.c @@ -1252,7 +1252,7 @@ SetDefaultACL(InternalDefaultACL *iacls) values[Anum_pg_default_acl_defaclacl - 1] = PointerGetDatum(new_acl); newtuple = heap_form_tuple(RelationGetDescr(rel), values, nulls); - simple_heap_insert(rel, newtuple); + CatalogTupleInsert(rel, newtuple); } else { @@ -1262,12 +1262,9 @@ SetDefaultACL(InternalDefaultACL *iacls) newtuple = heap_modify_tuple(tuple, RelationGetDescr(rel), values, nulls, replaces); - simple_heap_update(rel, &newtuple->t_self, newtuple); + CatalogTupleUpdate(rel, &newtuple->t_self, newtuple); } - /* keep the catalog indexes up to date */ - CatalogUpdateIndexes(rel, newtuple); - /* these dependencies don't change in an update */ if (isNew) { @@ -1697,10 +1694,7 @@ ExecGrant_Attribute(InternalGrant *istmt, Oid relOid, const char *relname, newtuple = heap_modify_tuple(attr_tuple, RelationGetDescr(attRelation), values, nulls, replaces); - simple_heap_update(attRelation, &newtuple->t_self, newtuple); - - /* keep the catalog indexes up to date */ - CatalogUpdateIndexes(attRelation, newtuple); + CatalogTupleUpdate(attRelation, &newtuple->t_self, newtuple); /* Update initial privileges for extensions */ recordExtensionInitPriv(relOid, RelationRelationId, attnum, @@ -1963,10 +1957,7 @@ ExecGrant_Relation(InternalGrant *istmt) newtuple = heap_modify_tuple(tuple, RelationGetDescr(relation), values, nulls, replaces); - simple_heap_update(relation, &newtuple->t_self, newtuple); - - /* keep the catalog indexes up to date */ - CatalogUpdateIndexes(relation, newtuple); + CatalogTupleUpdate(relation, &newtuple->t_self, newtuple); /* Update initial privileges for extensions */ recordExtensionInitPriv(relOid, RelationRelationId, 0, new_acl); @@ -2156,10 +2147,7 @@ ExecGrant_Database(InternalGrant *istmt) newtuple = heap_modify_tuple(tuple, RelationGetDescr(relation), values, nulls, replaces); - simple_heap_update(relation, &newtuple->t_self, newtuple); - - /* keep the catalog indexes up to date */ - CatalogUpdateIndexes(relation, newtuple); + CatalogTupleUpdate(relation, &newtuple->t_self, newtuple); /* Update the shared dependency ACL info */ updateAclDependencies(DatabaseRelationId, HeapTupleGetOid(tuple), 0, @@ -2281,10 +2269,7 @@ ExecGrant_Fdw(InternalGrant *istmt) newtuple = heap_modify_tuple(tuple, RelationGetDescr(relation), values, nulls, replaces); - simple_heap_update(relation, &newtuple->t_self, newtuple); - - /* keep the catalog indexes up to date */ - CatalogUpdateIndexes(relation, newtuple); + CatalogTupleUpdate(relation, &newtuple->t_self, newtuple); /* Update initial privileges for extensions */ recordExtensionInitPriv(fdwid, ForeignDataWrapperRelationId, 0, @@ -2410,10 +2395,7 @@ ExecGrant_ForeignServer(InternalGrant *istmt) newtuple = heap_modify_tuple(tuple, RelationGetDescr(relation), values, nulls, replaces); - simple_heap_update(relation, &newtuple->t_self, newtuple); - - /* keep the catalog indexes up to date */ - CatalogUpdateIndexes(relation, newtuple); + CatalogTupleUpdate(relation, &newtuple->t_self, newtuple); /* Update initial privileges for extensions */ recordExtensionInitPriv(srvid, ForeignServerRelationId, 0, new_acl); @@ -2537,10 +2519,7 @@ ExecGrant_Function(InternalGrant *istmt) newtuple = heap_modify_tuple(tuple, RelationGetDescr(relation), values, nulls, replaces); - simple_heap_update(relation, &newtuple->t_self, newtuple); - - /* keep the catalog indexes up to date */ - CatalogUpdateIndexes(relation, newtuple); + CatalogTupleUpdate(relation, &newtuple->t_self, newtuple); /* Update initial privileges for extensions */ recordExtensionInitPriv(funcId, ProcedureRelationId, 0, new_acl); @@ -2671,10 +2650,7 @@ ExecGrant_Language(InternalGrant *istmt) newtuple = heap_modify_tuple(tuple, RelationGetDescr(relation), values, nulls, replaces); - simple_heap_update(relation, &newtuple->t_self, newtuple); - - /* keep the catalog indexes up to date */ - CatalogUpdateIndexes(relation, newtuple); + CatalogTupleUpdate(relation, &newtuple->t_self, newtuple); /* Update initial privileges for extensions */ recordExtensionInitPriv(langId, LanguageRelationId, 0, new_acl); @@ -2813,10 +2789,7 @@ ExecGrant_Largeobject(InternalGrant *istmt) newtuple = heap_modify_tuple(tuple, RelationGetDescr(relation), values, nulls, replaces); - simple_heap_update(relation, &newtuple->t_self, newtuple); - - /* keep the catalog indexes up to date */ - CatalogUpdateIndexes(relation, newtuple); + CatalogTupleUpdate(relation, &newtuple->t_self, newtuple); /* Update initial privileges for extensions */ recordExtensionInitPriv(loid, LargeObjectRelationId, 0, new_acl); @@ -2941,10 +2914,7 @@ ExecGrant_Namespace(InternalGrant *istmt) newtuple = heap_modify_tuple(tuple, RelationGetDescr(relation), values, nulls, replaces); - simple_heap_update(relation, &newtuple->t_self, newtuple); - - /* keep the catalog indexes up to date */ - CatalogUpdateIndexes(relation, newtuple); + CatalogTupleUpdate(relation, &newtuple->t_self, newtuple); /* Update initial privileges for extensions */ recordExtensionInitPriv(nspid, NamespaceRelationId, 0, new_acl); @@ -3068,10 +3038,7 @@ ExecGrant_Tablespace(InternalGrant *istmt) newtuple = heap_modify_tuple(tuple, RelationGetDescr(relation), values, nulls, replaces); - simple_heap_update(relation, &newtuple->t_self, newtuple); - - /* keep the catalog indexes up to date */ - CatalogUpdateIndexes(relation, newtuple); + CatalogTupleUpdate(relation, &newtuple->t_self, newtuple); /* Update the shared dependency ACL info */ updateAclDependencies(TableSpaceRelationId, tblId, 0, @@ -3205,10 +3172,7 @@ ExecGrant_Type(InternalGrant *istmt) newtuple = heap_modify_tuple(tuple, RelationGetDescr(relation), values, nulls, replaces); - simple_heap_update(relation, &newtuple->t_self, newtuple); - - /* keep the catalog indexes up to date */ - CatalogUpdateIndexes(relation, newtuple); + CatalogTupleUpdate(relation, &newtuple->t_self, newtuple); /* Update initial privileges for extensions */ recordExtensionInitPriv(typId, TypeRelationId, 0, new_acl); @@ -5751,10 +5715,7 @@ recordExtensionInitPrivWorker(Oid objoid, Oid classoid, int objsubid, Acl *new_a oldtuple = heap_modify_tuple(oldtuple, RelationGetDescr(relation), values, nulls, replace); - simple_heap_update(relation, &oldtuple->t_self, oldtuple); - - /* keep the catalog indexes up to date */ - CatalogUpdateIndexes(relation, oldtuple); + CatalogTupleUpdate(relation, &oldtuple->t_self, oldtuple); } else /* new_acl is NULL, so delete the entry we found. */ @@ -5788,10 +5749,7 @@ recordExtensionInitPrivWorker(Oid objoid, Oid classoid, int objsubid, Acl *new_a tuple = heap_form_tuple(RelationGetDescr(relation), values, nulls); - simple_heap_insert(relation, tuple); - - /* keep the catalog indexes up to date */ - CatalogUpdateIndexes(relation, tuple); + CatalogTupleInsert(relation, tuple); } } diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 7ce9115832..cb6b6eb46c 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -635,7 +635,13 @@ InsertPgAttributeTuple(Relation pg_attribute_rel, if (indstate != NULL) CatalogIndexInsert(indstate, tup); else - CatalogUpdateIndexes(pg_attribute_rel, tup); + { + CatalogIndexState indstate; + + indstate = CatalogOpenIndexes(pg_attribute_rel); + CatalogIndexInsert(indstate, tup); + CatalogCloseIndexes(indstate); + } heap_freetuple(tup); } @@ -824,9 +830,7 @@ InsertPgClassTuple(Relation pg_class_desc, HeapTupleSetOid(tup, new_rel_oid); /* finally insert the new tuple, update the indexes, and clean up */ - simple_heap_insert(pg_class_desc, tup); - - CatalogUpdateIndexes(pg_class_desc, tup); + CatalogTupleInsert(pg_class_desc, tup); heap_freetuple(tup); } @@ -1599,10 +1603,7 @@ RemoveAttributeById(Oid relid, AttrNumber attnum) "........pg.dropped.%d........", attnum); namestrcpy(&(attStruct->attname), newattname); - simple_heap_update(attr_rel, &tuple->t_self, tuple); - - /* keep the system catalog indexes current */ - CatalogUpdateIndexes(attr_rel, tuple); + CatalogTupleUpdate(attr_rel, &tuple->t_self, tuple); } /* @@ -1731,10 +1732,7 @@ RemoveAttrDefaultById(Oid attrdefId) ((Form_pg_attribute) GETSTRUCT(tuple))->atthasdef = false; - simple_heap_update(attr_rel, &tuple->t_self, tuple); - - /* keep the system catalog indexes current */ - CatalogUpdateIndexes(attr_rel, tuple); + CatalogTupleUpdate(attr_rel, &tuple->t_self, tuple); /* * Our update of the pg_attribute row will force a relcache rebuild, so @@ -1932,9 +1930,7 @@ StoreAttrDefault(Relation rel, AttrNumber attnum, adrel = heap_open(AttrDefaultRelationId, RowExclusiveLock); tuple = heap_form_tuple(adrel->rd_att, values, nulls); - attrdefOid = simple_heap_insert(adrel, tuple); - - CatalogUpdateIndexes(adrel, tuple); + attrdefOid = CatalogTupleInsert(adrel, tuple); defobject.classId = AttrDefaultRelationId; defobject.objectId = attrdefOid; @@ -1964,9 +1960,7 @@ StoreAttrDefault(Relation rel, AttrNumber attnum, if (!attStruct->atthasdef) { attStruct->atthasdef = true; - simple_heap_update(attrrel, &atttup->t_self, atttup); - /* keep catalog indexes current */ - CatalogUpdateIndexes(attrrel, atttup); + CatalogTupleUpdate(attrrel, &atttup->t_self, atttup); } heap_close(attrrel, RowExclusiveLock); heap_freetuple(atttup); @@ -2561,8 +2555,7 @@ MergeWithExistingConstraint(Relation rel, char *ccname, Node *expr, Assert(is_local); con->connoinherit = true; } - simple_heap_update(conDesc, &tup->t_self, tup); - CatalogUpdateIndexes(conDesc, tup); + CatalogTupleUpdate(conDesc, &tup->t_self, tup); break; } } @@ -2602,10 +2595,7 @@ SetRelationNumChecks(Relation rel, int numchecks) { relStruct->relchecks = numchecks; - simple_heap_update(relrel, &reltup->t_self, reltup); - - /* keep catalog indexes current */ - CatalogUpdateIndexes(relrel, reltup); + CatalogTupleUpdate(relrel, &reltup->t_self, reltup); } else { @@ -3145,10 +3135,7 @@ StorePartitionKey(Relation rel, tuple = heap_form_tuple(RelationGetDescr(pg_partitioned_table), values, nulls); - simple_heap_insert(pg_partitioned_table, tuple); - - /* Update the indexes on pg_partitioned_table */ - CatalogUpdateIndexes(pg_partitioned_table, tuple); + CatalogTupleInsert(pg_partitioned_table, tuple); heap_close(pg_partitioned_table, RowExclusiveLock); /* Mark this relation as dependent on a few things as follows */ @@ -3265,8 +3252,7 @@ StorePartitionBound(Relation rel, Relation parent, Node *bound) new_val, new_null, new_repl); /* Also set the flag */ ((Form_pg_class) GETSTRUCT(newtuple))->relispartition = true; - simple_heap_update(classRel, &newtuple->t_self, newtuple); - CatalogUpdateIndexes(classRel, newtuple); + CatalogTupleUpdate(classRel, &newtuple->t_self, newtuple); heap_freetuple(newtuple); heap_close(classRel, RowExclusiveLock); diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 26cbc0e06a..618e170b6b 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -649,10 +649,7 @@ UpdateIndexRelation(Oid indexoid, /* * insert the tuple into the pg_index catalog */ - simple_heap_insert(pg_index, tuple); - - /* update the indexes on pg_index */ - CatalogUpdateIndexes(pg_index, tuple); + CatalogTupleInsert(pg_index, tuple); /* * close the relation and free the tuple @@ -1324,8 +1321,7 @@ index_constraint_create(Relation heapRelation, if (dirty) { - simple_heap_update(pg_index, &indexTuple->t_self, indexTuple); - CatalogUpdateIndexes(pg_index, indexTuple); + CatalogTupleUpdate(pg_index, &indexTuple->t_self, indexTuple); InvokeObjectPostAlterHookArg(IndexRelationId, indexRelationId, 0, InvalidOid, is_internal); @@ -2103,8 +2099,7 @@ index_build(Relation heapRelation, Assert(!indexForm->indcheckxmin); indexForm->indcheckxmin = true; - simple_heap_update(pg_index, &indexTuple->t_self, indexTuple); - CatalogUpdateIndexes(pg_index, indexTuple); + CatalogTupleUpdate(pg_index, &indexTuple->t_self, indexTuple); heap_freetuple(indexTuple); heap_close(pg_index, RowExclusiveLock); @@ -3448,8 +3443,7 @@ reindex_index(Oid indexId, bool skip_constraint_checks, char persistence, indexForm->indisvalid = true; indexForm->indisready = true; indexForm->indislive = true; - simple_heap_update(pg_index, &indexTuple->t_self, indexTuple); - CatalogUpdateIndexes(pg_index, indexTuple); + CatalogTupleUpdate(pg_index, &indexTuple->t_self, indexTuple); /* * Invalidate the relcache for the table, so that after we commit diff --git a/src/backend/catalog/indexing.c b/src/backend/catalog/indexing.c index 1915ca3779..c26765ab00 100644 --- a/src/backend/catalog/indexing.c +++ b/src/backend/catalog/indexing.c @@ -146,19 +146,49 @@ CatalogIndexInsert(CatalogIndexState indstate, HeapTuple heapTuple) } /* - * CatalogUpdateIndexes - do all the indexing work for a new catalog tuple + * CatalogTupleInsert - do heap and indexing work for a new catalog tuple * - * This is a convenience routine for the common case where we only need - * to insert or update a single tuple in a system catalog. Avoid using it for - * multiple tuples, since opening the indexes and building the index info - * structures is moderately expensive. + * This is a convenience routine for the common case of inserting a single + * tuple in a system catalog; it inserts a new heap tuple, keeping indexes + * current. Avoid using it for multiple tuples, since opening the indexes and + * building the index info structures is moderately expensive. + * + * The Oid of the inserted tuple is returned. + */ +Oid +CatalogTupleInsert(Relation heapRel, HeapTuple tup) +{ + CatalogIndexState indstate; + Oid oid; + + indstate = CatalogOpenIndexes(heapRel); + + oid = simple_heap_insert(heapRel, tup); + + CatalogIndexInsert(indstate, tup); + CatalogCloseIndexes(indstate); + + return oid; +} + +/* + * CatalogTupleUpdate - do heap and indexing work for updating a catalog tuple + * + * This is a convenience routine for the common case of updating a single + * tuple in a system catalog; it updates one heap tuple (identified by otid) + * with tup, keeping indexes current. Avoid using it for multiple tuples, + * since opening the indexes and building the index info structures is + * moderately expensive. */ void -CatalogUpdateIndexes(Relation heapRel, HeapTuple heapTuple) +CatalogTupleUpdate(Relation heapRel, ItemPointer otid, HeapTuple tup) { CatalogIndexState indstate; indstate = CatalogOpenIndexes(heapRel); - CatalogIndexInsert(indstate, heapTuple); + + simple_heap_update(heapRel, otid, tup); + + CatalogIndexInsert(indstate, tup); CatalogCloseIndexes(indstate); } diff --git a/src/backend/catalog/pg_aggregate.c b/src/backend/catalog/pg_aggregate.c index 3a4e22f0d6..ac06823999 100644 --- a/src/backend/catalog/pg_aggregate.c +++ b/src/backend/catalog/pg_aggregate.c @@ -674,9 +674,7 @@ AggregateCreate(const char *aggName, tupDesc = aggdesc->rd_att; tup = heap_form_tuple(tupDesc, values, nulls); - simple_heap_insert(aggdesc, tup); - - CatalogUpdateIndexes(aggdesc, tup); + CatalogTupleInsert(aggdesc, tup); heap_close(aggdesc, RowExclusiveLock); diff --git a/src/backend/catalog/pg_collation.c b/src/backend/catalog/pg_collation.c index 694c0f67f5..686d392123 100644 --- a/src/backend/catalog/pg_collation.c +++ b/src/backend/catalog/pg_collation.c @@ -134,12 +134,9 @@ CollationCreate(const char *collname, Oid collnamespace, tup = heap_form_tuple(tupDesc, values, nulls); /* insert a new tuple */ - oid = simple_heap_insert(rel, tup); + oid = CatalogTupleInsert(rel, tup); Assert(OidIsValid(oid)); - /* update the index if any */ - CatalogUpdateIndexes(rel, tup); - /* set up dependencies for the new collation */ myself.classId = CollationRelationId; myself.objectId = oid; diff --git a/src/backend/catalog/pg_constraint.c b/src/backend/catalog/pg_constraint.c index b5a0ce95c1..cf43f7e29b 100644 --- a/src/backend/catalog/pg_constraint.c +++ b/src/backend/catalog/pg_constraint.c @@ -226,10 +226,7 @@ CreateConstraintEntry(const char *constraintName, tup = heap_form_tuple(RelationGetDescr(conDesc), values, nulls); - conOid = simple_heap_insert(conDesc, tup); - - /* update catalog indexes */ - CatalogUpdateIndexes(conDesc, tup); + conOid = CatalogTupleInsert(conDesc, tup); conobject.classId = ConstraintRelationId; conobject.objectId = conOid; @@ -584,9 +581,7 @@ RemoveConstraintById(Oid conId) RelationGetRelationName(rel)); classForm->relchecks--; - simple_heap_update(pgrel, &relTup->t_self, relTup); - - CatalogUpdateIndexes(pgrel, relTup); + CatalogTupleUpdate(pgrel, &relTup->t_self, relTup); heap_freetuple(relTup); @@ -666,10 +661,7 @@ RenameConstraintById(Oid conId, const char *newname) /* OK, do the rename --- tuple is a copy, so OK to scribble on it */ namestrcpy(&(con->conname), newname); - simple_heap_update(conDesc, &tuple->t_self, tuple); - - /* update the system catalog indexes */ - CatalogUpdateIndexes(conDesc, tuple); + CatalogTupleUpdate(conDesc, &tuple->t_self, tuple); InvokeObjectPostAlterHook(ConstraintRelationId, conId, 0); @@ -736,8 +728,7 @@ AlterConstraintNamespaces(Oid ownerId, Oid oldNspId, conform->connamespace = newNspId; - simple_heap_update(conRel, &tup->t_self, tup); - CatalogUpdateIndexes(conRel, tup); + CatalogTupleUpdate(conRel, &tup->t_self, tup); /* * Note: currently, the constraint will not have its own diff --git a/src/backend/catalog/pg_conversion.c b/src/backend/catalog/pg_conversion.c index adaf7b8ee6..d1e2b93086 100644 --- a/src/backend/catalog/pg_conversion.c +++ b/src/backend/catalog/pg_conversion.c @@ -105,10 +105,7 @@ ConversionCreate(const char *conname, Oid connamespace, tup = heap_form_tuple(tupDesc, values, nulls); /* insert a new tuple */ - simple_heap_insert(rel, tup); - - /* update the index if any */ - CatalogUpdateIndexes(rel, tup); + CatalogTupleInsert(rel, tup); myself.classId = ConversionRelationId; myself.objectId = HeapTupleGetOid(tup); diff --git a/src/backend/catalog/pg_db_role_setting.c b/src/backend/catalog/pg_db_role_setting.c index 117cc8d1eb..3dfe9ac5a7 100644 --- a/src/backend/catalog/pg_db_role_setting.c +++ b/src/backend/catalog/pg_db_role_setting.c @@ -88,10 +88,7 @@ AlterSetting(Oid databaseid, Oid roleid, VariableSetStmt *setstmt) newtuple = heap_modify_tuple(tuple, RelationGetDescr(rel), repl_val, repl_null, repl_repl); - simple_heap_update(rel, &tuple->t_self, newtuple); - - /* Update indexes */ - CatalogUpdateIndexes(rel, newtuple); + CatalogTupleUpdate(rel, &tuple->t_self, newtuple); } else simple_heap_delete(rel, &tuple->t_self); @@ -129,10 +126,7 @@ AlterSetting(Oid databaseid, Oid roleid, VariableSetStmt *setstmt) newtuple = heap_modify_tuple(tuple, RelationGetDescr(rel), repl_val, repl_null, repl_repl); - simple_heap_update(rel, &tuple->t_self, newtuple); - - /* Update indexes */ - CatalogUpdateIndexes(rel, newtuple); + CatalogTupleUpdate(rel, &tuple->t_self, newtuple); } else simple_heap_delete(rel, &tuple->t_self); @@ -155,10 +149,7 @@ AlterSetting(Oid databaseid, Oid roleid, VariableSetStmt *setstmt) values[Anum_pg_db_role_setting_setconfig - 1] = PointerGetDatum(a); newtuple = heap_form_tuple(RelationGetDescr(rel), values, nulls); - simple_heap_insert(rel, newtuple); - - /* Update indexes */ - CatalogUpdateIndexes(rel, newtuple); + CatalogTupleInsert(rel, newtuple); } InvokeObjectPostAlterHookArg(DbRoleSettingRelationId, diff --git a/src/backend/catalog/pg_depend.c b/src/backend/catalog/pg_depend.c index b71fa1b981..e114a9cdfe 100644 --- a/src/backend/catalog/pg_depend.c +++ b/src/backend/catalog/pg_depend.c @@ -362,8 +362,7 @@ changeDependencyFor(Oid classId, Oid objectId, depform->refobjid = newRefObjectId; - simple_heap_update(depRel, &tup->t_self, tup); - CatalogUpdateIndexes(depRel, tup); + CatalogTupleUpdate(depRel, &tup->t_self, tup); heap_freetuple(tup); } diff --git a/src/backend/catalog/pg_enum.c b/src/backend/catalog/pg_enum.c index 089a9a0a65..1fc6f7c6b4 100644 --- a/src/backend/catalog/pg_enum.c +++ b/src/backend/catalog/pg_enum.c @@ -125,8 +125,7 @@ EnumValuesCreate(Oid enumTypeOid, List *vals) tup = heap_form_tuple(RelationGetDescr(pg_enum), values, nulls); HeapTupleSetOid(tup, oids[elemno]); - simple_heap_insert(pg_enum, tup); - CatalogUpdateIndexes(pg_enum, tup); + CatalogTupleInsert(pg_enum, tup); heap_freetuple(tup); elemno++; @@ -458,8 +457,7 @@ restart: values[Anum_pg_enum_enumlabel - 1] = NameGetDatum(&enumlabel); enum_tup = heap_form_tuple(RelationGetDescr(pg_enum), values, nulls); HeapTupleSetOid(enum_tup, newOid); - simple_heap_insert(pg_enum, enum_tup); - CatalogUpdateIndexes(pg_enum, enum_tup); + CatalogTupleInsert(pg_enum, enum_tup); heap_freetuple(enum_tup); heap_close(pg_enum, RowExclusiveLock); @@ -543,8 +541,7 @@ RenameEnumLabel(Oid enumTypeOid, /* Update the pg_enum entry */ namestrcpy(&en->enumlabel, newVal); - simple_heap_update(pg_enum, &enum_tup->t_self, enum_tup); - CatalogUpdateIndexes(pg_enum, enum_tup); + CatalogTupleUpdate(pg_enum, &enum_tup->t_self, enum_tup); heap_freetuple(enum_tup); heap_close(pg_enum, RowExclusiveLock); @@ -597,9 +594,7 @@ RenumberEnumType(Relation pg_enum, HeapTuple *existing, int nelems) { en->enumsortorder = newsortorder; - simple_heap_update(pg_enum, &newtup->t_self, newtup); - - CatalogUpdateIndexes(pg_enum, newtup); + CatalogTupleUpdate(pg_enum, &newtup->t_self, newtup); } heap_freetuple(newtup); diff --git a/src/backend/catalog/pg_largeobject.c b/src/backend/catalog/pg_largeobject.c index 24edf6a6b6..754ad9f79c 100644 --- a/src/backend/catalog/pg_largeobject.c +++ b/src/backend/catalog/pg_largeobject.c @@ -63,11 +63,9 @@ LargeObjectCreate(Oid loid) if (OidIsValid(loid)) HeapTupleSetOid(ntup, loid); - loid_new = simple_heap_insert(pg_lo_meta, ntup); + loid_new = CatalogTupleInsert(pg_lo_meta, ntup); Assert(!OidIsValid(loid) || loid == loid_new); - CatalogUpdateIndexes(pg_lo_meta, ntup); - heap_freetuple(ntup); heap_close(pg_lo_meta, RowExclusiveLock); diff --git a/src/backend/catalog/pg_namespace.c b/src/backend/catalog/pg_namespace.c index f048ad4207..5672536d31 100644 --- a/src/backend/catalog/pg_namespace.c +++ b/src/backend/catalog/pg_namespace.c @@ -76,11 +76,9 @@ NamespaceCreate(const char *nspName, Oid ownerId, bool isTemp) tup = heap_form_tuple(tupDesc, values, nulls); - nspoid = simple_heap_insert(nspdesc, tup); + nspoid = CatalogTupleInsert(nspdesc, tup); Assert(OidIsValid(nspoid)); - CatalogUpdateIndexes(nspdesc, tup); - heap_close(nspdesc, RowExclusiveLock); /* Record dependencies */ diff --git a/src/backend/catalog/pg_operator.c b/src/backend/catalog/pg_operator.c index 556f9fef13..b5cbc04889 100644 --- a/src/backend/catalog/pg_operator.c +++ b/src/backend/catalog/pg_operator.c @@ -262,9 +262,7 @@ OperatorShellMake(const char *operatorName, /* * insert our "shell" operator tuple */ - operatorObjectId = simple_heap_insert(pg_operator_desc, tup); - - CatalogUpdateIndexes(pg_operator_desc, tup); + operatorObjectId = CatalogTupleInsert(pg_operator_desc, tup); /* Add dependencies for the entry */ makeOperatorDependencies(tup, false); @@ -526,7 +524,7 @@ OperatorCreate(const char *operatorName, nulls, replaces); - simple_heap_update(pg_operator_desc, &tup->t_self, tup); + CatalogTupleUpdate(pg_operator_desc, &tup->t_self, tup); } else { @@ -535,12 +533,9 @@ OperatorCreate(const char *operatorName, tup = heap_form_tuple(RelationGetDescr(pg_operator_desc), values, nulls); - operatorObjectId = simple_heap_insert(pg_operator_desc, tup); + operatorObjectId = CatalogTupleInsert(pg_operator_desc, tup); } - /* Must update the indexes in either case */ - CatalogUpdateIndexes(pg_operator_desc, tup); - /* Add dependencies for the entry */ address = makeOperatorDependencies(tup, isUpdate); @@ -695,8 +690,7 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId, bool isDelete) /* If any columns were found to need modification, update tuple. */ if (update_commutator) { - simple_heap_update(pg_operator_desc, &tup->t_self, tup); - CatalogUpdateIndexes(pg_operator_desc, tup); + CatalogTupleUpdate(pg_operator_desc, &tup->t_self, tup); /* * Do CCI to make the updated tuple visible. We must do this in @@ -741,8 +735,7 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId, bool isDelete) /* If any columns were found to need modification, update tuple. */ if (update_negator) { - simple_heap_update(pg_operator_desc, &tup->t_self, tup); - CatalogUpdateIndexes(pg_operator_desc, tup); + CatalogTupleUpdate(pg_operator_desc, &tup->t_self, tup); /* * In the deletion case, do CCI to make the updated tuple visible. diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index 6ab849c6ef..ae27848116 100644 --- a/src/backend/catalog/pg_proc.c +++ b/src/backend/catalog/pg_proc.c @@ -572,7 +572,7 @@ ProcedureCreate(const char *procedureName, /* Okay, do it... */ tup = heap_modify_tuple(oldtup, tupDesc, values, nulls, replaces); - simple_heap_update(rel, &tup->t_self, tup); + CatalogTupleUpdate(rel, &tup->t_self, tup); ReleaseSysCache(oldtup); is_update = true; @@ -590,12 +590,10 @@ ProcedureCreate(const char *procedureName, nulls[Anum_pg_proc_proacl - 1] = true; tup = heap_form_tuple(tupDesc, values, nulls); - simple_heap_insert(rel, tup); + CatalogTupleInsert(rel, tup); is_update = false; } - /* Need to update indexes for either the insert or update case */ - CatalogUpdateIndexes(rel, tup); retval = HeapTupleGetOid(tup); diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c index 00ed28f0b2..0f784690ce 100644 --- a/src/backend/catalog/pg_publication.c +++ b/src/backend/catalog/pg_publication.c @@ -149,8 +149,7 @@ publication_add_relation(Oid pubid, Relation targetrel, tup = heap_form_tuple(RelationGetDescr(rel), values, nulls); /* Insert tuple into catalog. */ - prrelid = simple_heap_insert(rel, tup); - CatalogUpdateIndexes(rel, tup); + prrelid = CatalogTupleInsert(rel, tup); heap_freetuple(tup); ObjectAddressSet(myself, PublicationRelRelationId, prrelid); diff --git a/src/backend/catalog/pg_range.c b/src/backend/catalog/pg_range.c index d3a4c264b3..fcbf374bd6 100644 --- a/src/backend/catalog/pg_range.c +++ b/src/backend/catalog/pg_range.c @@ -58,8 +58,7 @@ RangeCreate(Oid rangeTypeOid, Oid rangeSubType, Oid rangeCollation, tup = heap_form_tuple(RelationGetDescr(pg_range), values, nulls); - simple_heap_insert(pg_range, tup); - CatalogUpdateIndexes(pg_range, tup); + CatalogTupleInsert(pg_range, tup); heap_freetuple(tup); /* record type's dependencies on range-related items */ diff --git a/src/backend/catalog/pg_shdepend.c b/src/backend/catalog/pg_shdepend.c index 60ed957655..4b68e05e51 100644 --- a/src/backend/catalog/pg_shdepend.c +++ b/src/backend/catalog/pg_shdepend.c @@ -260,10 +260,7 @@ shdepChangeDep(Relation sdepRel, shForm->refclassid = refclassid; shForm->refobjid = refobjid; - simple_heap_update(sdepRel, &oldtup->t_self, oldtup); - - /* keep indexes current */ - CatalogUpdateIndexes(sdepRel, oldtup); + CatalogTupleUpdate(sdepRel, &oldtup->t_self, oldtup); } else { @@ -287,10 +284,7 @@ shdepChangeDep(Relation sdepRel, * it's certainly a new tuple */ oldtup = heap_form_tuple(RelationGetDescr(sdepRel), values, nulls); - simple_heap_insert(sdepRel, oldtup); - - /* keep indexes current */ - CatalogUpdateIndexes(sdepRel, oldtup); + CatalogTupleInsert(sdepRel, oldtup); } if (oldtup) @@ -759,10 +753,7 @@ copyTemplateDependencies(Oid templateDbId, Oid newDbId) HeapTuple newtup; newtup = heap_modify_tuple(tup, sdepDesc, values, nulls, replace); - simple_heap_insert(sdepRel, newtup); - - /* Keep indexes current */ - CatalogIndexInsert(indstate, newtup); + CatalogTupleInsert(sdepRel, newtup); heap_freetuple(newtup); } @@ -882,10 +873,7 @@ shdepAddDependency(Relation sdepRel, tup = heap_form_tuple(sdepRel->rd_att, values, nulls); - simple_heap_insert(sdepRel, tup); - - /* keep indexes current */ - CatalogUpdateIndexes(sdepRel, tup); + CatalogTupleInsert(sdepRel, tup); /* clean up */ heap_freetuple(tup); diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c index 6d9a3247a9..04c10c6347 100644 --- a/src/backend/catalog/pg_type.c +++ b/src/backend/catalog/pg_type.c @@ -142,9 +142,7 @@ TypeShellMake(const char *typeName, Oid typeNamespace, Oid ownerId) /* * insert the tuple in the relation and get the tuple's oid. */ - typoid = simple_heap_insert(pg_type_desc, tup); - - CatalogUpdateIndexes(pg_type_desc, tup); + typoid = CatalogTupleInsert(pg_type_desc, tup); /* * Create dependencies. We can/must skip this in bootstrap mode. @@ -430,7 +428,7 @@ TypeCreate(Oid newTypeOid, nulls, replaces); - simple_heap_update(pg_type_desc, &tup->t_self, tup); + CatalogTupleUpdate(pg_type_desc, &tup->t_self, tup); typeObjectId = HeapTupleGetOid(tup); @@ -458,12 +456,9 @@ TypeCreate(Oid newTypeOid, } /* else allow system to assign oid */ - typeObjectId = simple_heap_insert(pg_type_desc, tup); + typeObjectId = CatalogTupleInsert(pg_type_desc, tup); } - /* Update indexes */ - CatalogUpdateIndexes(pg_type_desc, tup); - /* * Create dependencies. We can/must skip this in bootstrap mode. */ @@ -724,10 +719,7 @@ RenameTypeInternal(Oid typeOid, const char *newTypeName, Oid typeNamespace) /* OK, do the rename --- tuple is a copy, so OK to scribble on it */ namestrcpy(&(typ->typname), newTypeName); - simple_heap_update(pg_type_desc, &tuple->t_self, tuple); - - /* update the system catalog indexes */ - CatalogUpdateIndexes(pg_type_desc, tuple); + CatalogTupleUpdate(pg_type_desc, &tuple->t_self, tuple); InvokeObjectPostAlterHook(TypeRelationId, typeOid, 0); diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c index ee4a182e35..e5f773d51d 100644 --- a/src/backend/catalog/toasting.c +++ b/src/backend/catalog/toasting.c @@ -350,10 +350,7 @@ create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid, if (!IsBootstrapProcessingMode()) { /* normal case, use a transactional update */ - simple_heap_update(class_rel, &reltup->t_self, reltup); - - /* Keep catalog indexes current */ - CatalogUpdateIndexes(class_rel, reltup); + CatalogTupleUpdate(class_rel, &reltup->t_self, reltup); } else { diff --git a/src/backend/commands/alter.c b/src/backend/commands/alter.c index 768fcc82dd..d6195e49f5 100644 --- a/src/backend/commands/alter.c +++ b/src/backend/commands/alter.c @@ -284,8 +284,7 @@ AlterObjectRename_internal(Relation rel, Oid objectId, const char *new_name) values, nulls, replaces); /* Perform actual update */ - simple_heap_update(rel, &oldtup->t_self, newtup); - CatalogUpdateIndexes(rel, newtup); + CatalogTupleUpdate(rel, &oldtup->t_self, newtup); InvokeObjectPostAlterHook(classId, objectId, 0); @@ -722,8 +721,7 @@ AlterObjectNamespace_internal(Relation rel, Oid objid, Oid nspOid) values, nulls, replaces); /* Perform actual update */ - simple_heap_update(rel, &tup->t_self, newtup); - CatalogUpdateIndexes(rel, newtup); + CatalogTupleUpdate(rel, &tup->t_self, newtup); /* Release memory */ pfree(values); @@ -954,8 +952,7 @@ AlterObjectOwner_internal(Relation rel, Oid objectId, Oid new_ownerId) values, nulls, replaces); /* Perform actual update */ - simple_heap_update(rel, &newtup->t_self, newtup); - CatalogUpdateIndexes(rel, newtup); + CatalogTupleUpdate(rel, &newtup->t_self, newtup); /* Update owner dependency reference */ if (classId == LargeObjectMetadataRelationId) diff --git a/src/backend/commands/amcmds.c b/src/backend/commands/amcmds.c index 29061b888a..b6e60469f3 100644 --- a/src/backend/commands/amcmds.c +++ b/src/backend/commands/amcmds.c @@ -87,8 +87,7 @@ CreateAccessMethod(CreateAmStmt *stmt) tup = heap_form_tuple(RelationGetDescr(rel), values, nulls); - amoid = simple_heap_insert(rel, tup); - CatalogUpdateIndexes(rel, tup); + amoid = CatalogTupleInsert(rel, tup); heap_freetuple(tup); myself.classId = AccessMethodRelationId; diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index c9f6afeb1a..ed3acb1673 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -1589,18 +1589,15 @@ update_attstats(Oid relid, bool inh, int natts, VacAttrStats **vacattrstats) nulls, replaces); ReleaseSysCache(oldtup); - simple_heap_update(sd, &stup->t_self, stup); + CatalogTupleUpdate(sd, &stup->t_self, stup); } else { /* No, insert new tuple */ stup = heap_form_tuple(RelationGetDescr(sd), values, nulls); - simple_heap_insert(sd, stup); + CatalogTupleInsert(sd, stup); } - /* update indexes too */ - CatalogUpdateIndexes(sd, stup); - heap_freetuple(stup); } diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index f9309fcf47..e60e613315 100644 --- a/src/backend/commands/cluster.c +++ b/src/backend/commands/cluster.c @@ -523,8 +523,7 @@ mark_index_clustered(Relation rel, Oid indexOid, bool is_internal) if (indexForm->indisclustered) { indexForm->indisclustered = false; - simple_heap_update(pg_index, &indexTuple->t_self, indexTuple); - CatalogUpdateIndexes(pg_index, indexTuple); + CatalogTupleUpdate(pg_index, &indexTuple->t_self, indexTuple); } else if (thisIndexOid == indexOid) { @@ -532,8 +531,7 @@ mark_index_clustered(Relation rel, Oid indexOid, bool is_internal) if (!IndexIsValid(indexForm)) elog(ERROR, "cannot cluster on invalid index %u", indexOid); indexForm->indisclustered = true; - simple_heap_update(pg_index, &indexTuple->t_self, indexTuple); - CatalogUpdateIndexes(pg_index, indexTuple); + CatalogTupleUpdate(pg_index, &indexTuple->t_self, indexTuple); } InvokeObjectPostAlterHookArg(IndexRelationId, thisIndexOid, 0, @@ -1558,8 +1556,7 @@ finish_heap_swap(Oid OIDOldHeap, Oid OIDNewHeap, relform->relfrozenxid = frozenXid; relform->relminmxid = cutoffMulti; - simple_heap_update(relRelation, &reltup->t_self, reltup); - CatalogUpdateIndexes(relRelation, reltup); + CatalogTupleUpdate(relRelation, &reltup->t_self, reltup); heap_close(relRelation, RowExclusiveLock); } diff --git a/src/backend/commands/comment.c b/src/backend/commands/comment.c index ada0b0356a..8a437de815 100644 --- a/src/backend/commands/comment.c +++ b/src/backend/commands/comment.c @@ -199,7 +199,7 @@ CreateComments(Oid oid, Oid classoid, int32 subid, char *comment) { newtuple = heap_modify_tuple(oldtuple, RelationGetDescr(description), values, nulls, replaces); - simple_heap_update(description, &oldtuple->t_self, newtuple); + CatalogTupleUpdate(description, &oldtuple->t_self, newtuple); } break; /* Assume there can be only one match */ @@ -213,15 +213,11 @@ CreateComments(Oid oid, Oid classoid, int32 subid, char *comment) { newtuple = heap_form_tuple(RelationGetDescr(description), values, nulls); - simple_heap_insert(description, newtuple); + CatalogTupleInsert(description, newtuple); } - /* Update indexes, if necessary */ if (newtuple != NULL) - { - CatalogUpdateIndexes(description, newtuple); heap_freetuple(newtuple); - } /* Done */ @@ -293,7 +289,7 @@ CreateSharedComments(Oid oid, Oid classoid, char *comment) { newtuple = heap_modify_tuple(oldtuple, RelationGetDescr(shdescription), values, nulls, replaces); - simple_heap_update(shdescription, &oldtuple->t_self, newtuple); + CatalogTupleUpdate(shdescription, &oldtuple->t_self, newtuple); } break; /* Assume there can be only one match */ @@ -307,15 +303,11 @@ CreateSharedComments(Oid oid, Oid classoid, char *comment) { newtuple = heap_form_tuple(RelationGetDescr(shdescription), values, nulls); - simple_heap_insert(shdescription, newtuple); + CatalogTupleInsert(shdescription, newtuple); } - /* Update indexes, if necessary */ if (newtuple != NULL) - { - CatalogUpdateIndexes(shdescription, newtuple); heap_freetuple(newtuple); - } /* Done */ diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index 6ad8fd77b1..c3eb3c79df 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -546,10 +546,7 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt) HeapTupleSetOid(tuple, dboid); - simple_heap_insert(pg_database_rel, tuple); - - /* Update indexes */ - CatalogUpdateIndexes(pg_database_rel, tuple); + CatalogTupleInsert(pg_database_rel, tuple); /* * Now generate additional catalog entries associated with the new DB @@ -1040,8 +1037,7 @@ RenameDatabase(const char *oldname, const char *newname) if (!HeapTupleIsValid(newtup)) elog(ERROR, "cache lookup failed for database %u", db_id); namestrcpy(&(((Form_pg_database) GETSTRUCT(newtup))->datname), newname); - simple_heap_update(rel, &newtup->t_self, newtup); - CatalogUpdateIndexes(rel, newtup); + CatalogTupleUpdate(rel, &newtup->t_self, newtup); InvokeObjectPostAlterHook(DatabaseRelationId, db_id, 0); @@ -1296,10 +1292,7 @@ movedb(const char *dbname, const char *tblspcname) newtuple = heap_modify_tuple(oldtuple, RelationGetDescr(pgdbrel), new_record, new_record_nulls, new_record_repl); - simple_heap_update(pgdbrel, &oldtuple->t_self, newtuple); - - /* Update indexes */ - CatalogUpdateIndexes(pgdbrel, newtuple); + CatalogTupleUpdate(pgdbrel, &oldtuple->t_self, newtuple); InvokeObjectPostAlterHook(DatabaseRelationId, HeapTupleGetOid(newtuple), 0); @@ -1554,10 +1547,7 @@ AlterDatabase(ParseState *pstate, AlterDatabaseStmt *stmt, bool isTopLevel) newtuple = heap_modify_tuple(tuple, RelationGetDescr(rel), new_record, new_record_nulls, new_record_repl); - simple_heap_update(rel, &tuple->t_self, newtuple); - - /* Update indexes */ - CatalogUpdateIndexes(rel, newtuple); + CatalogTupleUpdate(rel, &tuple->t_self, newtuple); InvokeObjectPostAlterHook(DatabaseRelationId, HeapTupleGetOid(newtuple), 0); @@ -1692,8 +1682,7 @@ AlterDatabaseOwner(const char *dbname, Oid newOwnerId) } newtuple = heap_modify_tuple(tuple, RelationGetDescr(rel), repl_val, repl_null, repl_repl); - simple_heap_update(rel, &newtuple->t_self, newtuple); - CatalogUpdateIndexes(rel, newtuple); + CatalogTupleUpdate(rel, &newtuple->t_self, newtuple); heap_freetuple(newtuple); diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c index 8125537361..94c4ea5dd2 100644 --- a/src/backend/commands/event_trigger.c +++ b/src/backend/commands/event_trigger.c @@ -405,8 +405,7 @@ insert_event_trigger_tuple(char *trigname, char *eventname, Oid evtOwner, /* Insert heap tuple. */ tuple = heap_form_tuple(tgrel->rd_att, values, nulls); - trigoid = simple_heap_insert(tgrel, tuple); - CatalogUpdateIndexes(tgrel, tuple); + trigoid = CatalogTupleInsert(tgrel, tuple); heap_freetuple(tuple); /* Depend on owner. */ @@ -524,8 +523,7 @@ AlterEventTrigger(AlterEventTrigStmt *stmt) evtForm = (Form_pg_event_trigger) GETSTRUCT(tup); evtForm->evtenabled = tgenabled; - simple_heap_update(tgrel, &tup->t_self, tup); - CatalogUpdateIndexes(tgrel, tup); + CatalogTupleUpdate(tgrel, &tup->t_self, tup); InvokeObjectPostAlterHook(EventTriggerRelationId, trigoid, 0); @@ -621,8 +619,7 @@ AlterEventTriggerOwner_internal(Relation rel, HeapTuple tup, Oid newOwnerId) errhint("The owner of an event trigger must be a superuser."))); form->evtowner = newOwnerId; - simple_heap_update(rel, &tup->t_self, tup); - CatalogUpdateIndexes(rel, tup); + CatalogTupleUpdate(rel, &tup->t_self, tup); /* Update owner dependency reference */ changeDependencyOnOwner(EventTriggerRelationId, diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c index f23c6977cb..14738ea584 100644 --- a/src/backend/commands/extension.c +++ b/src/backend/commands/extension.c @@ -1773,8 +1773,7 @@ InsertExtensionTuple(const char *extName, Oid extOwner, tuple = heap_form_tuple(rel->rd_att, values, nulls); - extensionOid = simple_heap_insert(rel, tuple); - CatalogUpdateIndexes(rel, tuple); + extensionOid = CatalogTupleInsert(rel, tuple); heap_freetuple(tuple); heap_close(rel, RowExclusiveLock); @@ -2485,8 +2484,7 @@ pg_extension_config_dump(PG_FUNCTION_ARGS) extTup = heap_modify_tuple(extTup, RelationGetDescr(extRel), repl_val, repl_null, repl_repl); - simple_heap_update(extRel, &extTup->t_self, extTup); - CatalogUpdateIndexes(extRel, extTup); + CatalogTupleUpdate(extRel, &extTup->t_self, extTup); systable_endscan(extScan); @@ -2663,8 +2661,7 @@ extension_config_remove(Oid extensionoid, Oid tableoid) extTup = heap_modify_tuple(extTup, RelationGetDescr(extRel), repl_val, repl_null, repl_repl); - simple_heap_update(extRel, &extTup->t_self, extTup); - CatalogUpdateIndexes(extRel, extTup); + CatalogTupleUpdate(extRel, &extTup->t_self, extTup); systable_endscan(extScan); @@ -2844,8 +2841,7 @@ AlterExtensionNamespace(List *names, const char *newschema, Oid *oldschema) /* Now adjust pg_extension.extnamespace */ extForm->extnamespace = nspOid; - simple_heap_update(extRel, &extTup->t_self, extTup); - CatalogUpdateIndexes(extRel, extTup); + CatalogTupleUpdate(extRel, &extTup->t_self, extTup); heap_close(extRel, RowExclusiveLock); @@ -3091,8 +3087,7 @@ ApplyExtensionUpdates(Oid extensionOid, extTup = heap_modify_tuple(extTup, RelationGetDescr(extRel), values, nulls, repl); - simple_heap_update(extRel, &extTup->t_self, extTup); - CatalogUpdateIndexes(extRel, extTup); + CatalogTupleUpdate(extRel, &extTup->t_self, extTup); systable_endscan(extScan); diff --git a/src/backend/commands/foreigncmds.c b/src/backend/commands/foreigncmds.c index 6ff8b6998b..ad8ca2d8eb 100644 --- a/src/backend/commands/foreigncmds.c +++ b/src/backend/commands/foreigncmds.c @@ -256,8 +256,7 @@ AlterForeignDataWrapperOwner_internal(Relation rel, HeapTuple tup, Oid newOwnerI tup = heap_modify_tuple(tup, RelationGetDescr(rel), repl_val, repl_null, repl_repl); - simple_heap_update(rel, &tup->t_self, tup); - CatalogUpdateIndexes(rel, tup); + CatalogTupleUpdate(rel, &tup->t_self, tup); /* Update owner dependency reference */ changeDependencyOnOwner(ForeignDataWrapperRelationId, @@ -397,8 +396,7 @@ AlterForeignServerOwner_internal(Relation rel, HeapTuple tup, Oid newOwnerId) tup = heap_modify_tuple(tup, RelationGetDescr(rel), repl_val, repl_null, repl_repl); - simple_heap_update(rel, &tup->t_self, tup); - CatalogUpdateIndexes(rel, tup); + CatalogTupleUpdate(rel, &tup->t_self, tup); /* Update owner dependency reference */ changeDependencyOnOwner(ForeignServerRelationId, HeapTupleGetOid(tup), @@ -629,8 +627,7 @@ CreateForeignDataWrapper(CreateFdwStmt *stmt) tuple = heap_form_tuple(rel->rd_att, values, nulls); - fdwId = simple_heap_insert(rel, tuple); - CatalogUpdateIndexes(rel, tuple); + fdwId = CatalogTupleInsert(rel, tuple); heap_freetuple(tuple); @@ -786,8 +783,7 @@ AlterForeignDataWrapper(AlterFdwStmt *stmt) tp = heap_modify_tuple(tp, RelationGetDescr(rel), repl_val, repl_null, repl_repl); - simple_heap_update(rel, &tp->t_self, tp); - CatalogUpdateIndexes(rel, tp); + CatalogTupleUpdate(rel, &tp->t_self, tp); heap_freetuple(tp); @@ -941,9 +937,7 @@ CreateForeignServer(CreateForeignServerStmt *stmt) tuple = heap_form_tuple(rel->rd_att, values, nulls); - srvId = simple_heap_insert(rel, tuple); - - CatalogUpdateIndexes(rel, tuple); + srvId = CatalogTupleInsert(rel, tuple); heap_freetuple(tuple); @@ -1056,8 +1050,7 @@ AlterForeignServer(AlterForeignServerStmt *stmt) tp = heap_modify_tuple(tp, RelationGetDescr(rel), repl_val, repl_null, repl_repl); - simple_heap_update(rel, &tp->t_self, tp); - CatalogUpdateIndexes(rel, tp); + CatalogTupleUpdate(rel, &tp->t_self, tp); InvokeObjectPostAlterHook(ForeignServerRelationId, srvId, 0); @@ -1190,9 +1183,7 @@ CreateUserMapping(CreateUserMappingStmt *stmt) tuple = heap_form_tuple(rel->rd_att, values, nulls); - umId = simple_heap_insert(rel, tuple); - - CatalogUpdateIndexes(rel, tuple); + umId = CatalogTupleInsert(rel, tuple); heap_freetuple(tuple); @@ -1307,8 +1298,7 @@ AlterUserMapping(AlterUserMappingStmt *stmt) tp = heap_modify_tuple(tp, RelationGetDescr(rel), repl_val, repl_null, repl_repl); - simple_heap_update(rel, &tp->t_self, tp); - CatalogUpdateIndexes(rel, tp); + CatalogTupleUpdate(rel, &tp->t_self, tp); ObjectAddressSet(address, UserMappingRelationId, umId); @@ -1484,8 +1474,7 @@ CreateForeignTable(CreateForeignTableStmt *stmt, Oid relid) tuple = heap_form_tuple(ftrel->rd_att, values, nulls); - simple_heap_insert(ftrel, tuple); - CatalogUpdateIndexes(ftrel, tuple); + CatalogTupleInsert(ftrel, tuple); heap_freetuple(tuple); diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index ec833c382d..f4fa8d35a4 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -1292,8 +1292,7 @@ AlterFunction(ParseState *pstate, AlterFunctionStmt *stmt) procForm->proparallel = interpret_func_parallel(parallel_item); /* Do the update */ - simple_heap_update(rel, &tup->t_self, tup); - CatalogUpdateIndexes(rel, tup); + CatalogTupleUpdate(rel, &tup->t_self, tup); InvokeObjectPostAlterHook(ProcedureRelationId, funcOid, 0); @@ -1333,9 +1332,7 @@ SetFunctionReturnType(Oid funcOid, Oid newRetType) procForm->prorettype = newRetType; /* update the catalog and its indexes */ - simple_heap_update(pg_proc_rel, &tup->t_self, tup); - - CatalogUpdateIndexes(pg_proc_rel, tup); + CatalogTupleUpdate(pg_proc_rel, &tup->t_self, tup); heap_close(pg_proc_rel, RowExclusiveLock); } @@ -1368,9 +1365,7 @@ SetFunctionArgType(Oid funcOid, int argIndex, Oid newArgType) procForm->proargtypes.values[argIndex] = newArgType; /* update the catalog and its indexes */ - simple_heap_update(pg_proc_rel, &tup->t_self, tup); - - CatalogUpdateIndexes(pg_proc_rel, tup); + CatalogTupleUpdate(pg_proc_rel, &tup->t_self, tup); heap_close(pg_proc_rel, RowExclusiveLock); } @@ -1656,9 +1651,7 @@ CreateCast(CreateCastStmt *stmt) tuple = heap_form_tuple(RelationGetDescr(relation), values, nulls); - castid = simple_heap_insert(relation, tuple); - - CatalogUpdateIndexes(relation, tuple); + castid = CatalogTupleInsert(relation, tuple); /* make dependency entries */ myself.classId = CastRelationId; @@ -1921,7 +1914,7 @@ CreateTransform(CreateTransformStmt *stmt) replaces[Anum_pg_transform_trftosql - 1] = true; newtuple = heap_modify_tuple(tuple, RelationGetDescr(relation), values, nulls, replaces); - simple_heap_update(relation, &newtuple->t_self, newtuple); + CatalogTupleUpdate(relation, &newtuple->t_self, newtuple); transformid = HeapTupleGetOid(tuple); ReleaseSysCache(tuple); @@ -1930,12 +1923,10 @@ CreateTransform(CreateTransformStmt *stmt) else { newtuple = heap_form_tuple(RelationGetDescr(relation), values, nulls); - transformid = simple_heap_insert(relation, newtuple); + transformid = CatalogTupleInsert(relation, newtuple); is_replace = false; } - CatalogUpdateIndexes(relation, newtuple); - if (is_replace) deleteDependencyRecordsFor(TransformRelationId, transformid, true); diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c index b7daf1ca0a..a18c917336 100644 --- a/src/backend/commands/matview.c +++ b/src/backend/commands/matview.c @@ -100,9 +100,7 @@ SetMatViewPopulatedState(Relation relation, bool newstate) ((Form_pg_class) GETSTRUCT(tuple))->relispopulated = newstate; - simple_heap_update(pgrel, &tuple->t_self, tuple); - - CatalogUpdateIndexes(pgrel, tuple); + CatalogTupleUpdate(pgrel, &tuple->t_self, tuple); heap_freetuple(tuple); heap_close(pgrel, RowExclusiveLock); diff --git a/src/backend/commands/opclasscmds.c b/src/backend/commands/opclasscmds.c index bc43483b94..99a39bdd74 100644 --- a/src/backend/commands/opclasscmds.c +++ b/src/backend/commands/opclasscmds.c @@ -278,9 +278,7 @@ CreateOpFamily(char *amname, char *opfname, Oid namespaceoid, Oid amoid) tup = heap_form_tuple(rel->rd_att, values, nulls); - opfamilyoid = simple_heap_insert(rel, tup); - - CatalogUpdateIndexes(rel, tup); + opfamilyoid = CatalogTupleInsert(rel, tup); heap_freetuple(tup); @@ -654,9 +652,7 @@ DefineOpClass(CreateOpClassStmt *stmt) tup = heap_form_tuple(rel->rd_att, values, nulls); - opclassoid = simple_heap_insert(rel, tup); - - CatalogUpdateIndexes(rel, tup); + opclassoid = CatalogTupleInsert(rel, tup); heap_freetuple(tup); @@ -1327,9 +1323,7 @@ storeOperators(List *opfamilyname, Oid amoid, tup = heap_form_tuple(rel->rd_att, values, nulls); - entryoid = simple_heap_insert(rel, tup); - - CatalogUpdateIndexes(rel, tup); + entryoid = CatalogTupleInsert(rel, tup); heap_freetuple(tup); @@ -1438,9 +1432,7 @@ storeProcedures(List *opfamilyname, Oid amoid, tup = heap_form_tuple(rel->rd_att, values, nulls); - entryoid = simple_heap_insert(rel, tup); - - CatalogUpdateIndexes(rel, tup); + entryoid = CatalogTupleInsert(rel, tup); heap_freetuple(tup); diff --git a/src/backend/commands/operatorcmds.c b/src/backend/commands/operatorcmds.c index a273376e21..66d2452dbe 100644 --- a/src/backend/commands/operatorcmds.c +++ b/src/backend/commands/operatorcmds.c @@ -518,8 +518,7 @@ AlterOperator(AlterOperatorStmt *stmt) tup = heap_modify_tuple(tup, RelationGetDescr(catalog), values, nulls, replaces); - simple_heap_update(catalog, &tup->t_self, tup); - CatalogUpdateIndexes(catalog, tup); + CatalogTupleUpdate(catalog, &tup->t_self, tup); address = makeOperatorDependencies(tup, true); diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c index 5d9d3a6a05..da2b1ae0e7 100644 --- a/src/backend/commands/policy.c +++ b/src/backend/commands/policy.c @@ -614,10 +614,7 @@ RemoveRoleFromObjectPolicy(Oid roleid, Oid classid, Oid policy_id) new_tuple = heap_modify_tuple(tuple, RelationGetDescr(pg_policy_rel), values, isnull, replaces); - simple_heap_update(pg_policy_rel, &new_tuple->t_self, new_tuple); - - /* Update Catalog Indexes */ - CatalogUpdateIndexes(pg_policy_rel, new_tuple); + CatalogTupleUpdate(pg_policy_rel, &new_tuple->t_self, new_tuple); /* Remove all old dependencies. */ deleteDependencyRecordsFor(PolicyRelationId, policy_id, false); @@ -823,10 +820,7 @@ CreatePolicy(CreatePolicyStmt *stmt) policy_tuple = heap_form_tuple(RelationGetDescr(pg_policy_rel), values, isnull); - policy_id = simple_heap_insert(pg_policy_rel, policy_tuple); - - /* Update Indexes */ - CatalogUpdateIndexes(pg_policy_rel, policy_tuple); + policy_id = CatalogTupleInsert(pg_policy_rel, policy_tuple); /* Record Dependencies */ target.classId = RelationRelationId; @@ -1150,10 +1144,7 @@ AlterPolicy(AlterPolicyStmt *stmt) new_tuple = heap_modify_tuple(policy_tuple, RelationGetDescr(pg_policy_rel), values, isnull, replaces); - simple_heap_update(pg_policy_rel, &new_tuple->t_self, new_tuple); - - /* Update Catalog Indexes */ - CatalogUpdateIndexes(pg_policy_rel, new_tuple); + CatalogTupleUpdate(pg_policy_rel, &new_tuple->t_self, new_tuple); /* Update Dependencies. */ deleteDependencyRecordsFor(PolicyRelationId, policy_id, false); @@ -1287,10 +1278,7 @@ rename_policy(RenameStmt *stmt) namestrcpy(&((Form_pg_policy) GETSTRUCT(policy_tuple))->polname, stmt->newname); - simple_heap_update(pg_policy_rel, &policy_tuple->t_self, policy_tuple); - - /* keep system catalog indexes current */ - CatalogUpdateIndexes(pg_policy_rel, policy_tuple); + CatalogTupleUpdate(pg_policy_rel, &policy_tuple->t_self, policy_tuple); InvokeObjectPostAlterHook(PolicyRelationId, HeapTupleGetOid(policy_tuple), 0); diff --git a/src/backend/commands/proclang.c b/src/backend/commands/proclang.c index b684f413c0..4c8daa5928 100644 --- a/src/backend/commands/proclang.c +++ b/src/backend/commands/proclang.c @@ -378,7 +378,7 @@ create_proc_lang(const char *languageName, bool replace, /* Okay, do it... */ tup = heap_modify_tuple(oldtup, tupDesc, values, nulls, replaces); - simple_heap_update(rel, &tup->t_self, tup); + CatalogTupleUpdate(rel, &tup->t_self, tup); ReleaseSysCache(oldtup); is_update = true; @@ -387,13 +387,10 @@ create_proc_lang(const char *languageName, bool replace, { /* Creating a new language */ tup = heap_form_tuple(tupDesc, values, nulls); - simple_heap_insert(rel, tup); + CatalogTupleInsert(rel, tup); is_update = false; } - /* Need to update indexes for either the insert or update case */ - CatalogUpdateIndexes(rel, tup); - /* * Create dependencies for the new language. If we are updating an * existing language, first delete any existing pg_depend entries. diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c index 173b076648..bc0f653991 100644 --- a/src/backend/commands/publicationcmds.c +++ b/src/backend/commands/publicationcmds.c @@ -215,8 +215,7 @@ CreatePublication(CreatePublicationStmt *stmt) tup = heap_form_tuple(RelationGetDescr(rel), values, nulls); /* Insert tuple into catalog. */ - puboid = simple_heap_insert(rel, tup); - CatalogUpdateIndexes(rel, tup); + puboid = CatalogTupleInsert(rel, tup); heap_freetuple(tup); recordDependencyOnOwner(PublicationRelationId, puboid, GetUserId()); @@ -295,8 +294,7 @@ AlterPublicationOptions(AlterPublicationStmt *stmt, Relation rel, replaces); /* Update the catalog. */ - simple_heap_update(rel, &tup->t_self, tup); - CatalogUpdateIndexes(rel, tup); + CatalogTupleUpdate(rel, &tup->t_self, tup); CommandCounterIncrement(); @@ -686,8 +684,7 @@ AlterPublicationOwner_internal(Relation rel, HeapTuple tup, Oid newOwnerId) errhint("The owner of a publication must be a superuser."))); form->pubowner = newOwnerId; - simple_heap_update(rel, &tup->t_self, tup); - CatalogUpdateIndexes(rel, tup); + CatalogTupleUpdate(rel, &tup->t_self, tup); /* Update owner dependency reference */ changeDependencyOnOwner(PublicationRelationId, diff --git a/src/backend/commands/schemacmds.c b/src/backend/commands/schemacmds.c index c3b37b2625..d14c269803 100644 --- a/src/backend/commands/schemacmds.c +++ b/src/backend/commands/schemacmds.c @@ -281,8 +281,7 @@ RenameSchema(const char *oldname, const char *newname) /* rename */ namestrcpy(&(((Form_pg_namespace) GETSTRUCT(tup))->nspname), newname); - simple_heap_update(rel, &tup->t_self, tup); - CatalogUpdateIndexes(rel, tup); + CatalogTupleUpdate(rel, &tup->t_self, tup); InvokeObjectPostAlterHook(NamespaceRelationId, HeapTupleGetOid(tup), 0); @@ -417,8 +416,7 @@ AlterSchemaOwner_internal(HeapTuple tup, Relation rel, Oid newOwnerId) newtuple = heap_modify_tuple(tup, RelationGetDescr(rel), repl_val, repl_null, repl_repl); - simple_heap_update(rel, &newtuple->t_self, newtuple); - CatalogUpdateIndexes(rel, newtuple); + CatalogTupleUpdate(rel, &newtuple->t_self, newtuple); heap_freetuple(newtuple); diff --git a/src/backend/commands/seclabel.c b/src/backend/commands/seclabel.c index 324f2e7bd9..506c90f6e2 100644 --- a/src/backend/commands/seclabel.c +++ b/src/backend/commands/seclabel.c @@ -299,7 +299,7 @@ SetSharedSecurityLabel(const ObjectAddress *object, replaces[Anum_pg_shseclabel_label - 1] = true; newtup = heap_modify_tuple(oldtup, RelationGetDescr(pg_shseclabel), values, nulls, replaces); - simple_heap_update(pg_shseclabel, &oldtup->t_self, newtup); + CatalogTupleUpdate(pg_shseclabel, &oldtup->t_self, newtup); } } systable_endscan(scan); @@ -309,15 +309,11 @@ SetSharedSecurityLabel(const ObjectAddress *object, { newtup = heap_form_tuple(RelationGetDescr(pg_shseclabel), values, nulls); - simple_heap_insert(pg_shseclabel, newtup); + CatalogTupleInsert(pg_shseclabel, newtup); } - /* Update indexes, if necessary */ if (newtup != NULL) - { - CatalogUpdateIndexes(pg_shseclabel, newtup); heap_freetuple(newtup); - } heap_close(pg_shseclabel, RowExclusiveLock); } @@ -390,7 +386,7 @@ SetSecurityLabel(const ObjectAddress *object, replaces[Anum_pg_seclabel_label - 1] = true; newtup = heap_modify_tuple(oldtup, RelationGetDescr(pg_seclabel), values, nulls, replaces); - simple_heap_update(pg_seclabel, &oldtup->t_self, newtup); + CatalogTupleUpdate(pg_seclabel, &oldtup->t_self, newtup); } } systable_endscan(scan); @@ -400,15 +396,12 @@ SetSecurityLabel(const ObjectAddress *object, { newtup = heap_form_tuple(RelationGetDescr(pg_seclabel), values, nulls); - simple_heap_insert(pg_seclabel, newtup); + CatalogTupleInsert(pg_seclabel, newtup); } /* Update indexes, if necessary */ if (newtup != NULL) - { - CatalogUpdateIndexes(pg_seclabel, newtup); heap_freetuple(newtup); - } heap_close(pg_seclabel, RowExclusiveLock); } diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index 0c673f5763..6ac76b1e56 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -236,8 +236,7 @@ DefineSequence(ParseState *pstate, CreateSeqStmt *seq) pgs_values[Anum_pg_sequence_seqcache - 1] = Int64GetDatumFast(seqform.seqcache); tuple = heap_form_tuple(tupDesc, pgs_values, pgs_nulls); - simple_heap_insert(rel, tuple); - CatalogUpdateIndexes(rel, tuple); + CatalogTupleInsert(rel, tuple); heap_freetuple(tuple); heap_close(rel, RowExclusiveLock); @@ -504,8 +503,7 @@ AlterSequence(ParseState *pstate, AlterSeqStmt *stmt) relation_close(seqrel, NoLock); - simple_heap_update(rel, &tuple->t_self, tuple); - CatalogUpdateIndexes(rel, tuple); + CatalogTupleUpdate(rel, &tuple->t_self, tuple); heap_close(rel, RowExclusiveLock); return address; diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index 41ef7a3aa4..5de999928f 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -277,8 +277,7 @@ CreateSubscription(CreateSubscriptionStmt *stmt) tup = heap_form_tuple(RelationGetDescr(rel), values, nulls); /* Insert tuple into catalog. */ - subid = simple_heap_insert(rel, tup); - CatalogUpdateIndexes(rel, tup); + subid = CatalogTupleInsert(rel, tup); heap_freetuple(tup); recordDependencyOnOwner(SubscriptionRelationId, subid, owner); @@ -408,8 +407,7 @@ AlterSubscription(AlterSubscriptionStmt *stmt) replaces); /* Update the catalog. */ - simple_heap_update(rel, &tup->t_self, tup); - CatalogUpdateIndexes(rel, tup); + CatalogTupleUpdate(rel, &tup->t_self, tup); ObjectAddressSet(myself, SubscriptionRelationId, subid); @@ -588,8 +586,7 @@ AlterSubscriptionOwner_internal(Relation rel, HeapTuple tup, Oid newOwnerId) errhint("The owner of an subscription must be a superuser."))); form->subowner = newOwnerId; - simple_heap_update(rel, &tup->t_self, tup); - CatalogUpdateIndexes(rel, tup); + CatalogTupleUpdate(rel, &tup->t_self, tup); /* Update owner dependency reference */ changeDependencyOnOwner(SubscriptionRelationId, diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 90f2f7f00e..764071bd11 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -2308,9 +2308,7 @@ StoreCatalogInheritance1(Oid relationId, Oid parentOid, tuple = heap_form_tuple(desc, values, nulls); - simple_heap_insert(inhRelation, tuple); - - CatalogUpdateIndexes(inhRelation, tuple); + CatalogTupleInsert(inhRelation, tuple); heap_freetuple(tuple); @@ -2398,10 +2396,7 @@ SetRelationHasSubclass(Oid relationId, bool relhassubclass) if (classtuple->relhassubclass != relhassubclass) { classtuple->relhassubclass = relhassubclass; - simple_heap_update(relationRelation, &tuple->t_self, tuple); - - /* keep the catalog indexes up to date */ - CatalogUpdateIndexes(relationRelation, tuple); + CatalogTupleUpdate(relationRelation, &tuple->t_self, tuple); } else { @@ -2592,10 +2587,7 @@ renameatt_internal(Oid myrelid, /* apply the update */ namestrcpy(&(attform->attname), newattname); - simple_heap_update(attrelation, &atttup->t_self, atttup); - - /* keep system catalog indexes current */ - CatalogUpdateIndexes(attrelation, atttup); + CatalogTupleUpdate(attrelation, &atttup->t_self, atttup); InvokeObjectPostAlterHook(RelationRelationId, myrelid, attnum); @@ -2902,10 +2894,7 @@ RenameRelationInternal(Oid myrelid, const char *newrelname, bool is_internal) */ namestrcpy(&(relform->relname), newrelname); - simple_heap_update(relrelation, &reltup->t_self, reltup); - - /* keep the system catalog indexes current */ - CatalogUpdateIndexes(relrelation, reltup); + CatalogTupleUpdate(relrelation, &reltup->t_self, reltup); InvokeObjectPostAlterHookArg(RelationRelationId, myrelid, 0, InvalidOid, is_internal); @@ -5097,8 +5086,7 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, /* Bump the existing child att's inhcount */ childatt->attinhcount++; - simple_heap_update(attrdesc, &tuple->t_self, tuple); - CatalogUpdateIndexes(attrdesc, tuple); + CatalogTupleUpdate(attrdesc, &tuple->t_self, tuple); heap_freetuple(tuple); @@ -5191,10 +5179,7 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, else ((Form_pg_class) GETSTRUCT(reltup))->relnatts = newattnum; - simple_heap_update(pgclass, &reltup->t_self, reltup); - - /* keep catalog indexes current */ - CatalogUpdateIndexes(pgclass, reltup); + CatalogTupleUpdate(pgclass, &reltup->t_self, reltup); heap_freetuple(reltup); @@ -5630,10 +5615,7 @@ ATExecDropNotNull(Relation rel, const char *colName, LOCKMODE lockmode) { ((Form_pg_attribute) GETSTRUCT(tuple))->attnotnull = FALSE; - simple_heap_update(attr_rel, &tuple->t_self, tuple); - - /* keep the system catalog indexes current */ - CatalogUpdateIndexes(attr_rel, tuple); + CatalogTupleUpdate(attr_rel, &tuple->t_self, tuple); ObjectAddressSubSet(address, RelationRelationId, RelationGetRelid(rel), attnum); @@ -5708,10 +5690,7 @@ ATExecSetNotNull(AlteredTableInfo *tab, Relation rel, { ((Form_pg_attribute) GETSTRUCT(tuple))->attnotnull = TRUE; - simple_heap_update(attr_rel, &tuple->t_self, tuple); - - /* keep the system catalog indexes current */ - CatalogUpdateIndexes(attr_rel, tuple); + CatalogTupleUpdate(attr_rel, &tuple->t_self, tuple); /* Tell Phase 3 it needs to test the constraint */ tab->new_notnull = true; @@ -5876,10 +5855,7 @@ ATExecSetStatistics(Relation rel, const char *colName, Node *newValue, LOCKMODE attrtuple->attstattarget = newtarget; - simple_heap_update(attrelation, &tuple->t_self, tuple); - - /* keep system catalog indexes current */ - CatalogUpdateIndexes(attrelation, tuple); + CatalogTupleUpdate(attrelation, &tuple->t_self, tuple); InvokeObjectPostAlterHook(RelationRelationId, RelationGetRelid(rel), @@ -5952,8 +5928,7 @@ ATExecSetOptions(Relation rel, const char *colName, Node *options, repl_val, repl_null, repl_repl); /* Update system catalog. */ - simple_heap_update(attrelation, &newtuple->t_self, newtuple); - CatalogUpdateIndexes(attrelation, newtuple); + CatalogTupleUpdate(attrelation, &newtuple->t_self, newtuple); InvokeObjectPostAlterHook(RelationRelationId, RelationGetRelid(rel), @@ -6036,10 +6011,7 @@ ATExecSetStorage(Relation rel, const char *colName, Node *newValue, LOCKMODE loc errmsg("column data type %s can only have storage PLAIN", format_type_be(attrtuple->atttypid)))); - simple_heap_update(attrelation, &tuple->t_self, tuple); - - /* keep system catalog indexes current */ - CatalogUpdateIndexes(attrelation, tuple); + CatalogTupleUpdate(attrelation, &tuple->t_self, tuple); InvokeObjectPostAlterHook(RelationRelationId, RelationGetRelid(rel), @@ -6277,10 +6249,7 @@ ATExecDropColumn(List **wqueue, Relation rel, const char *colName, /* Child column must survive my deletion */ childatt->attinhcount--; - simple_heap_update(attr_rel, &tuple->t_self, tuple); - - /* keep the system catalog indexes current */ - CatalogUpdateIndexes(attr_rel, tuple); + CatalogTupleUpdate(attr_rel, &tuple->t_self, tuple); /* Make update visible */ CommandCounterIncrement(); @@ -6296,10 +6265,7 @@ ATExecDropColumn(List **wqueue, Relation rel, const char *colName, childatt->attinhcount--; childatt->attislocal = true; - simple_heap_update(attr_rel, &tuple->t_self, tuple); - - /* keep the system catalog indexes current */ - CatalogUpdateIndexes(attr_rel, tuple); + CatalogTupleUpdate(attr_rel, &tuple->t_self, tuple); /* Make update visible */ CommandCounterIncrement(); @@ -6343,10 +6309,7 @@ ATExecDropColumn(List **wqueue, Relation rel, const char *colName, tuple_class = (Form_pg_class) GETSTRUCT(tuple); tuple_class->relhasoids = false; - simple_heap_update(class_rel, &tuple->t_self, tuple); - - /* Keep the catalog indexes up to date */ - CatalogUpdateIndexes(class_rel, tuple); + CatalogTupleUpdate(class_rel, &tuple->t_self, tuple); heap_close(class_rel, RowExclusiveLock); @@ -7195,8 +7158,7 @@ ATExecAlterConstraint(Relation rel, AlterTableCmd *cmd, copy_con = (Form_pg_constraint) GETSTRUCT(copyTuple); copy_con->condeferrable = cmdcon->deferrable; copy_con->condeferred = cmdcon->initdeferred; - simple_heap_update(conrel, ©Tuple->t_self, copyTuple); - CatalogUpdateIndexes(conrel, copyTuple); + CatalogTupleUpdate(conrel, ©Tuple->t_self, copyTuple); InvokeObjectPostAlterHook(ConstraintRelationId, HeapTupleGetOid(contuple), 0); @@ -7249,8 +7211,7 @@ ATExecAlterConstraint(Relation rel, AlterTableCmd *cmd, copy_tg->tgdeferrable = cmdcon->deferrable; copy_tg->tginitdeferred = cmdcon->initdeferred; - simple_heap_update(tgrel, ©Tuple->t_self, copyTuple); - CatalogUpdateIndexes(tgrel, copyTuple); + CatalogTupleUpdate(tgrel, ©Tuple->t_self, copyTuple); InvokeObjectPostAlterHook(TriggerRelationId, HeapTupleGetOid(tgtuple), 0); @@ -7436,8 +7397,7 @@ ATExecValidateConstraint(Relation rel, char *constrName, bool recurse, copyTuple = heap_copytuple(tuple); copy_con = (Form_pg_constraint) GETSTRUCT(copyTuple); copy_con->convalidated = true; - simple_heap_update(conrel, ©Tuple->t_self, copyTuple); - CatalogUpdateIndexes(conrel, copyTuple); + CatalogTupleUpdate(conrel, ©Tuple->t_self, copyTuple); InvokeObjectPostAlterHook(ConstraintRelationId, HeapTupleGetOid(tuple), 0); @@ -8339,8 +8299,7 @@ ATExecDropConstraint(Relation rel, const char *constrName, { /* Child constraint must survive my deletion */ con->coninhcount--; - simple_heap_update(conrel, ©_tuple->t_self, copy_tuple); - CatalogUpdateIndexes(conrel, copy_tuple); + CatalogTupleUpdate(conrel, ©_tuple->t_self, copy_tuple); /* Make update visible */ CommandCounterIncrement(); @@ -8356,8 +8315,7 @@ ATExecDropConstraint(Relation rel, const char *constrName, con->coninhcount--; con->conislocal = true; - simple_heap_update(conrel, ©_tuple->t_self, copy_tuple); - CatalogUpdateIndexes(conrel, copy_tuple); + CatalogTupleUpdate(conrel, ©_tuple->t_self, copy_tuple); /* Make update visible */ CommandCounterIncrement(); @@ -9003,10 +8961,7 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel, ReleaseSysCache(typeTuple); - simple_heap_update(attrelation, &heapTup->t_self, heapTup); - - /* keep system catalog indexes current */ - CatalogUpdateIndexes(attrelation, heapTup); + CatalogTupleUpdate(attrelation, &heapTup->t_self, heapTup); heap_close(attrelation, RowExclusiveLock); @@ -9144,8 +9099,7 @@ ATExecAlterColumnGenericOptions(Relation rel, newtuple = heap_modify_tuple(tuple, RelationGetDescr(attrel), repl_val, repl_null, repl_repl); - simple_heap_update(attrel, &newtuple->t_self, newtuple); - CatalogUpdateIndexes(attrel, newtuple); + CatalogTupleUpdate(attrel, &newtuple->t_self, newtuple); InvokeObjectPostAlterHook(RelationRelationId, RelationGetRelid(rel), @@ -9661,8 +9615,7 @@ ATExecChangeOwner(Oid relationOid, Oid newOwnerId, bool recursing, LOCKMODE lock newtuple = heap_modify_tuple(tuple, RelationGetDescr(class_rel), repl_val, repl_null, repl_repl); - simple_heap_update(class_rel, &newtuple->t_self, newtuple); - CatalogUpdateIndexes(class_rel, newtuple); + CatalogTupleUpdate(class_rel, &newtuple->t_self, newtuple); heap_freetuple(newtuple); @@ -9789,8 +9742,7 @@ change_owner_fix_column_acls(Oid relationOid, Oid oldOwnerId, Oid newOwnerId) RelationGetDescr(attRelation), repl_val, repl_null, repl_repl); - simple_heap_update(attRelation, &newtuple->t_self, newtuple); - CatalogUpdateIndexes(attRelation, newtuple); + CatalogTupleUpdate(attRelation, &newtuple->t_self, newtuple); heap_freetuple(newtuple); } @@ -10067,9 +10019,7 @@ ATExecSetRelOptions(Relation rel, List *defList, AlterTableType operation, newtuple = heap_modify_tuple(tuple, RelationGetDescr(pgclass), repl_val, repl_null, repl_repl); - simple_heap_update(pgclass, &newtuple->t_self, newtuple); - - CatalogUpdateIndexes(pgclass, newtuple); + CatalogTupleUpdate(pgclass, &newtuple->t_self, newtuple); InvokeObjectPostAlterHook(RelationRelationId, RelationGetRelid(rel), 0); @@ -10126,9 +10076,7 @@ ATExecSetRelOptions(Relation rel, List *defList, AlterTableType operation, newtuple = heap_modify_tuple(tuple, RelationGetDescr(pgclass), repl_val, repl_null, repl_repl); - simple_heap_update(pgclass, &newtuple->t_self, newtuple); - - CatalogUpdateIndexes(pgclass, newtuple); + CatalogTupleUpdate(pgclass, &newtuple->t_self, newtuple); InvokeObjectPostAlterHookArg(RelationRelationId, RelationGetRelid(toastrel), 0, @@ -10289,8 +10237,7 @@ ATExecSetTableSpace(Oid tableOid, Oid newTableSpace, LOCKMODE lockmode) /* update the pg_class row */ rd_rel->reltablespace = (newTableSpace == MyDatabaseTableSpace) ? InvalidOid : newTableSpace; rd_rel->relfilenode = newrelfilenode; - simple_heap_update(pg_class, &tuple->t_self, tuple); - CatalogUpdateIndexes(pg_class, tuple); + CatalogTupleUpdate(pg_class, &tuple->t_self, tuple); InvokeObjectPostAlterHook(RelationRelationId, RelationGetRelid(rel), 0); @@ -10940,8 +10887,7 @@ MergeAttributesIntoExisting(Relation child_rel, Relation parent_rel) childatt->attislocal = false; } - simple_heap_update(attrrel, &tuple->t_self, tuple); - CatalogUpdateIndexes(attrrel, tuple); + CatalogTupleUpdate(attrrel, &tuple->t_self, tuple); heap_freetuple(tuple); } else @@ -10980,8 +10926,7 @@ MergeAttributesIntoExisting(Relation child_rel, Relation parent_rel) childatt->attislocal = false; } - simple_heap_update(attrrel, &tuple->t_self, tuple); - CatalogUpdateIndexes(attrrel, tuple); + CatalogTupleUpdate(attrrel, &tuple->t_self, tuple); heap_freetuple(tuple); } else @@ -11118,8 +11063,7 @@ MergeConstraintsIntoExisting(Relation child_rel, Relation parent_rel) child_con->conislocal = false; } - simple_heap_update(catalog_relation, &child_copy->t_self, child_copy); - CatalogUpdateIndexes(catalog_relation, child_copy); + CatalogTupleUpdate(catalog_relation, &child_copy->t_self, child_copy); heap_freetuple(child_copy); found = true; @@ -11289,8 +11233,7 @@ RemoveInheritance(Relation child_rel, Relation parent_rel) if (copy_att->attinhcount == 0) copy_att->attislocal = true; - simple_heap_update(catalogRelation, ©Tuple->t_self, copyTuple); - CatalogUpdateIndexes(catalogRelation, copyTuple); + CatalogTupleUpdate(catalogRelation, ©Tuple->t_self, copyTuple); heap_freetuple(copyTuple); } } @@ -11364,8 +11307,7 @@ RemoveInheritance(Relation child_rel, Relation parent_rel) if (copy_con->coninhcount == 0) copy_con->conislocal = true; - simple_heap_update(catalogRelation, ©Tuple->t_self, copyTuple); - CatalogUpdateIndexes(catalogRelation, copyTuple); + CatalogTupleUpdate(catalogRelation, ©Tuple->t_self, copyTuple); heap_freetuple(copyTuple); } } @@ -11565,8 +11507,7 @@ ATExecAddOf(Relation rel, const TypeName *ofTypename, LOCKMODE lockmode) if (!HeapTupleIsValid(classtuple)) elog(ERROR, "cache lookup failed for relation %u", relid); ((Form_pg_class) GETSTRUCT(classtuple))->reloftype = typeid; - simple_heap_update(relationRelation, &classtuple->t_self, classtuple); - CatalogUpdateIndexes(relationRelation, classtuple); + CatalogTupleUpdate(relationRelation, &classtuple->t_self, classtuple); InvokeObjectPostAlterHook(RelationRelationId, relid, 0); @@ -11610,8 +11551,7 @@ ATExecDropOf(Relation rel, LOCKMODE lockmode) if (!HeapTupleIsValid(tuple)) elog(ERROR, "cache lookup failed for relation %u", relid); ((Form_pg_class) GETSTRUCT(tuple))->reloftype = InvalidOid; - simple_heap_update(relationRelation, &tuple->t_self, tuple); - CatalogUpdateIndexes(relationRelation, tuple); + CatalogTupleUpdate(relationRelation, &tuple->t_self, tuple); InvokeObjectPostAlterHook(RelationRelationId, relid, 0); @@ -11651,8 +11591,7 @@ relation_mark_replica_identity(Relation rel, char ri_type, Oid indexOid, if (pg_class_form->relreplident != ri_type) { pg_class_form->relreplident = ri_type; - simple_heap_update(pg_class, &pg_class_tuple->t_self, pg_class_tuple); - CatalogUpdateIndexes(pg_class, pg_class_tuple); + CatalogTupleUpdate(pg_class, &pg_class_tuple->t_self, pg_class_tuple); } heap_close(pg_class, RowExclusiveLock); heap_freetuple(pg_class_tuple); @@ -11711,8 +11650,7 @@ relation_mark_replica_identity(Relation rel, char ri_type, Oid indexOid, if (dirty) { - simple_heap_update(pg_index, &pg_index_tuple->t_self, pg_index_tuple); - CatalogUpdateIndexes(pg_index, pg_index_tuple); + CatalogTupleUpdate(pg_index, &pg_index_tuple->t_self, pg_index_tuple); InvokeObjectPostAlterHookArg(IndexRelationId, thisIndexOid, 0, InvalidOid, is_internal); } @@ -11861,10 +11799,7 @@ ATExecEnableRowSecurity(Relation rel) elog(ERROR, "cache lookup failed for relation %u", relid); ((Form_pg_class) GETSTRUCT(tuple))->relrowsecurity = true; - simple_heap_update(pg_class, &tuple->t_self, tuple); - - /* keep catalog indexes current */ - CatalogUpdateIndexes(pg_class, tuple); + CatalogTupleUpdate(pg_class, &tuple->t_self, tuple); heap_close(pg_class, RowExclusiveLock); heap_freetuple(tuple); @@ -11888,10 +11823,7 @@ ATExecDisableRowSecurity(Relation rel) elog(ERROR, "cache lookup failed for relation %u", relid); ((Form_pg_class) GETSTRUCT(tuple))->relrowsecurity = false; - simple_heap_update(pg_class, &tuple->t_self, tuple); - - /* keep catalog indexes current */ - CatalogUpdateIndexes(pg_class, tuple); + CatalogTupleUpdate(pg_class, &tuple->t_self, tuple); heap_close(pg_class, RowExclusiveLock); heap_freetuple(tuple); @@ -11917,10 +11849,7 @@ ATExecForceNoForceRowSecurity(Relation rel, bool force_rls) elog(ERROR, "cache lookup failed for relation %u", relid); ((Form_pg_class) GETSTRUCT(tuple))->relforcerowsecurity = force_rls; - simple_heap_update(pg_class, &tuple->t_self, tuple); - - /* keep catalog indexes current */ - CatalogUpdateIndexes(pg_class, tuple); + CatalogTupleUpdate(pg_class, &tuple->t_self, tuple); heap_close(pg_class, RowExclusiveLock); heap_freetuple(tuple); @@ -11988,8 +11917,7 @@ ATExecGenericOptions(Relation rel, List *options) tuple = heap_modify_tuple(tuple, RelationGetDescr(ftrel), repl_val, repl_null, repl_repl); - simple_heap_update(ftrel, &tuple->t_self, tuple); - CatalogUpdateIndexes(ftrel, tuple); + CatalogTupleUpdate(ftrel, &tuple->t_self, tuple); /* * Invalidate relcache so that all sessions will refresh any cached plans @@ -12284,8 +12212,7 @@ AlterRelationNamespaceInternal(Relation classRel, Oid relOid, /* classTup is a copy, so OK to scribble on */ classForm->relnamespace = newNspOid; - simple_heap_update(classRel, &classTup->t_self, classTup); - CatalogUpdateIndexes(classRel, classTup); + CatalogTupleUpdate(classRel, &classTup->t_self, classTup); /* Update dependency on schema if caller said so */ if (hasDependEntry && @@ -13520,8 +13447,7 @@ ATExecDetachPartition(Relation rel, RangeVar *name) new_val, new_null, new_repl); ((Form_pg_class) GETSTRUCT(newtuple))->relispartition = false; - simple_heap_update(classRel, &newtuple->t_self, newtuple); - CatalogUpdateIndexes(classRel, newtuple); + CatalogTupleUpdate(classRel, &newtuple->t_self, newtuple); heap_freetuple(newtuple); heap_close(classRel, RowExclusiveLock); diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c index 651e1b303a..6e652aa66b 100644 --- a/src/backend/commands/tablespace.c +++ b/src/backend/commands/tablespace.c @@ -344,9 +344,7 @@ CreateTableSpace(CreateTableSpaceStmt *stmt) tuple = heap_form_tuple(rel->rd_att, values, nulls); - tablespaceoid = simple_heap_insert(rel, tuple); - - CatalogUpdateIndexes(rel, tuple); + tablespaceoid = CatalogTupleInsert(rel, tuple); heap_freetuple(tuple); @@ -971,8 +969,7 @@ RenameTableSpace(const char *oldname, const char *newname) /* OK, update the entry */ namestrcpy(&(newform->spcname), newname); - simple_heap_update(rel, &newtuple->t_self, newtuple); - CatalogUpdateIndexes(rel, newtuple); + CatalogTupleUpdate(rel, &newtuple->t_self, newtuple); InvokeObjectPostAlterHook(TableSpaceRelationId, tspId, 0); @@ -1044,8 +1041,7 @@ AlterTableSpaceOptions(AlterTableSpaceOptionsStmt *stmt) repl_null, repl_repl); /* Update system catalog. */ - simple_heap_update(rel, &newtuple->t_self, newtuple); - CatalogUpdateIndexes(rel, newtuple); + CatalogTupleUpdate(rel, &newtuple->t_self, newtuple); InvokeObjectPostAlterHook(TableSpaceRelationId, HeapTupleGetOid(tup), 0); diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index f067d0a7bb..b3e89a44f7 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -773,9 +773,7 @@ CreateTrigger(CreateTrigStmt *stmt, const char *queryString, /* * Insert tuple into pg_trigger. */ - simple_heap_insert(tgrel, tuple); - - CatalogUpdateIndexes(tgrel, tuple); + CatalogTupleInsert(tgrel, tuple); heap_freetuple(tuple); heap_close(tgrel, RowExclusiveLock); @@ -802,9 +800,7 @@ CreateTrigger(CreateTrigStmt *stmt, const char *queryString, ((Form_pg_class) GETSTRUCT(tuple))->relhastriggers = true; - simple_heap_update(pgrel, &tuple->t_self, tuple); - - CatalogUpdateIndexes(pgrel, tuple); + CatalogTupleUpdate(pgrel, &tuple->t_self, tuple); heap_freetuple(tuple); heap_close(pgrel, RowExclusiveLock); @@ -1444,10 +1440,7 @@ renametrig(RenameStmt *stmt) namestrcpy(&((Form_pg_trigger) GETSTRUCT(tuple))->tgname, stmt->newname); - simple_heap_update(tgrel, &tuple->t_self, tuple); - - /* keep system catalog indexes current */ - CatalogUpdateIndexes(tgrel, tuple); + CatalogTupleUpdate(tgrel, &tuple->t_self, tuple); InvokeObjectPostAlterHook(TriggerRelationId, HeapTupleGetOid(tuple), 0); @@ -1560,10 +1553,7 @@ EnableDisableTrigger(Relation rel, const char *tgname, newtrig->tgenabled = fires_when; - simple_heap_update(tgrel, &newtup->t_self, newtup); - - /* Keep catalog indexes current */ - CatalogUpdateIndexes(tgrel, newtup); + CatalogTupleUpdate(tgrel, &newtup->t_self, newtup); heap_freetuple(newtup); diff --git a/src/backend/commands/tsearchcmds.c b/src/backend/commands/tsearchcmds.c index 479a160815..988930b1c5 100644 --- a/src/backend/commands/tsearchcmds.c +++ b/src/backend/commands/tsearchcmds.c @@ -271,9 +271,7 @@ DefineTSParser(List *names, List *parameters) tup = heap_form_tuple(prsRel->rd_att, values, nulls); - prsOid = simple_heap_insert(prsRel, tup); - - CatalogUpdateIndexes(prsRel, tup); + prsOid = CatalogTupleInsert(prsRel, tup); address = makeParserDependencies(tup); @@ -482,9 +480,7 @@ DefineTSDictionary(List *names, List *parameters) tup = heap_form_tuple(dictRel->rd_att, values, nulls); - dictOid = simple_heap_insert(dictRel, tup); - - CatalogUpdateIndexes(dictRel, tup); + dictOid = CatalogTupleInsert(dictRel, tup); address = makeDictionaryDependencies(tup); @@ -620,9 +616,7 @@ AlterTSDictionary(AlterTSDictionaryStmt *stmt) newtup = heap_modify_tuple(tup, RelationGetDescr(rel), repl_val, repl_null, repl_repl); - simple_heap_update(rel, &newtup->t_self, newtup); - - CatalogUpdateIndexes(rel, newtup); + CatalogTupleUpdate(rel, &newtup->t_self, newtup); InvokeObjectPostAlterHook(TSDictionaryRelationId, dictId, 0); @@ -806,9 +800,7 @@ DefineTSTemplate(List *names, List *parameters) tup = heap_form_tuple(tmplRel->rd_att, values, nulls); - tmplOid = simple_heap_insert(tmplRel, tup); - - CatalogUpdateIndexes(tmplRel, tup); + tmplOid = CatalogTupleInsert(tmplRel, tup); address = makeTSTemplateDependencies(tup); @@ -1066,9 +1058,7 @@ DefineTSConfiguration(List *names, List *parameters, ObjectAddress *copied) tup = heap_form_tuple(cfgRel->rd_att, values, nulls); - cfgOid = simple_heap_insert(cfgRel, tup); - - CatalogUpdateIndexes(cfgRel, tup); + cfgOid = CatalogTupleInsert(cfgRel, tup); if (OidIsValid(sourceOid)) { @@ -1106,9 +1096,7 @@ DefineTSConfiguration(List *names, List *parameters, ObjectAddress *copied) newmaptup = heap_form_tuple(mapRel->rd_att, mapvalues, mapnulls); - simple_heap_insert(mapRel, newmaptup); - - CatalogUpdateIndexes(mapRel, newmaptup); + CatalogTupleInsert(mapRel, newmaptup); heap_freetuple(newmaptup); } @@ -1409,9 +1397,7 @@ MakeConfigurationMapping(AlterTSConfigurationStmt *stmt, newtup = heap_modify_tuple(maptup, RelationGetDescr(relMap), repl_val, repl_null, repl_repl); - simple_heap_update(relMap, &newtup->t_self, newtup); - - CatalogUpdateIndexes(relMap, newtup); + CatalogTupleUpdate(relMap, &newtup->t_self, newtup); } } @@ -1436,8 +1422,7 @@ MakeConfigurationMapping(AlterTSConfigurationStmt *stmt, values[Anum_pg_ts_config_map_mapdict - 1] = ObjectIdGetDatum(dictIds[j]); tup = heap_form_tuple(relMap->rd_att, values, nulls); - simple_heap_insert(relMap, tup); - CatalogUpdateIndexes(relMap, tup); + CatalogTupleInsert(relMap, tup); heap_freetuple(tup); } diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c index 4c33d55484..b848389ab8 100644 --- a/src/backend/commands/typecmds.c +++ b/src/backend/commands/typecmds.c @@ -2221,9 +2221,7 @@ AlterDomainDefault(List *names, Node *defaultRaw) new_record, new_record_nulls, new_record_repl); - simple_heap_update(rel, &tup->t_self, newtuple); - - CatalogUpdateIndexes(rel, newtuple); + CatalogTupleUpdate(rel, &tup->t_self, newtuple); /* Rebuild dependencies */ GenerateTypeDependencies(typTup->typnamespace, @@ -2360,9 +2358,7 @@ AlterDomainNotNull(List *names, bool notNull) */ typTup->typnotnull = notNull; - simple_heap_update(typrel, &tup->t_self, tup); - - CatalogUpdateIndexes(typrel, tup); + CatalogTupleUpdate(typrel, &tup->t_self, tup); InvokeObjectPostAlterHook(TypeRelationId, domainoid, 0); @@ -2662,8 +2658,7 @@ AlterDomainValidateConstraint(List *names, char *constrName) copyTuple = heap_copytuple(tuple); copy_con = (Form_pg_constraint) GETSTRUCT(copyTuple); copy_con->convalidated = true; - simple_heap_update(conrel, ©Tuple->t_self, copyTuple); - CatalogUpdateIndexes(conrel, copyTuple); + CatalogTupleUpdate(conrel, ©Tuple->t_self, copyTuple); InvokeObjectPostAlterHook(ConstraintRelationId, HeapTupleGetOid(copyTuple), 0); @@ -3404,9 +3399,7 @@ AlterTypeOwnerInternal(Oid typeOid, Oid newOwnerId) tup = heap_modify_tuple(tup, RelationGetDescr(rel), repl_val, repl_null, repl_repl); - simple_heap_update(rel, &tup->t_self, tup); - - CatalogUpdateIndexes(rel, tup); + CatalogTupleUpdate(rel, &tup->t_self, tup); /* If it has an array type, update that too */ if (OidIsValid(typTup->typarray)) @@ -3566,8 +3559,7 @@ AlterTypeNamespaceInternal(Oid typeOid, Oid nspOid, /* tup is a copy, so we can scribble directly on it */ typform->typnamespace = nspOid; - simple_heap_update(rel, &tup->t_self, tup); - CatalogUpdateIndexes(rel, tup); + CatalogTupleUpdate(rel, &tup->t_self, tup); } /* diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c index b746982d2e..4422fadd52 100644 --- a/src/backend/commands/user.c +++ b/src/backend/commands/user.c @@ -433,8 +433,7 @@ CreateRole(ParseState *pstate, CreateRoleStmt *stmt) /* * Insert new record in the pg_authid table */ - roleid = simple_heap_insert(pg_authid_rel, tuple); - CatalogUpdateIndexes(pg_authid_rel, tuple); + roleid = CatalogTupleInsert(pg_authid_rel, tuple); /* * Advance command counter so we can see new record; else tests in @@ -838,10 +837,7 @@ AlterRole(AlterRoleStmt *stmt) new_tuple = heap_modify_tuple(tuple, pg_authid_dsc, new_record, new_record_nulls, new_record_repl); - simple_heap_update(pg_authid_rel, &tuple->t_self, new_tuple); - - /* Update indexes */ - CatalogUpdateIndexes(pg_authid_rel, new_tuple); + CatalogTupleUpdate(pg_authid_rel, &tuple->t_self, new_tuple); InvokeObjectPostAlterHook(AuthIdRelationId, roleid, 0); @@ -1243,9 +1239,7 @@ RenameRole(const char *oldname, const char *newname) } newtuple = heap_modify_tuple(oldtuple, dsc, repl_val, repl_null, repl_repl); - simple_heap_update(rel, &oldtuple->t_self, newtuple); - - CatalogUpdateIndexes(rel, newtuple); + CatalogTupleUpdate(rel, &oldtuple->t_self, newtuple); InvokeObjectPostAlterHook(AuthIdRelationId, roleid, 0); @@ -1530,16 +1524,14 @@ AddRoleMems(const char *rolename, Oid roleid, tuple = heap_modify_tuple(authmem_tuple, pg_authmem_dsc, new_record, new_record_nulls, new_record_repl); - simple_heap_update(pg_authmem_rel, &tuple->t_self, tuple); - CatalogUpdateIndexes(pg_authmem_rel, tuple); + CatalogTupleUpdate(pg_authmem_rel, &tuple->t_self, tuple); ReleaseSysCache(authmem_tuple); } else { tuple = heap_form_tuple(pg_authmem_dsc, new_record, new_record_nulls); - simple_heap_insert(pg_authmem_rel, tuple); - CatalogUpdateIndexes(pg_authmem_rel, tuple); + CatalogTupleInsert(pg_authmem_rel, tuple); } /* CCI after each change, in case there are duplicates in list */ @@ -1647,8 +1639,7 @@ DelRoleMems(const char *rolename, Oid roleid, tuple = heap_modify_tuple(authmem_tuple, pg_authmem_dsc, new_record, new_record_nulls, new_record_repl); - simple_heap_update(pg_authmem_rel, &tuple->t_self, tuple); - CatalogUpdateIndexes(pg_authmem_rel, tuple); + CatalogTupleUpdate(pg_authmem_rel, &tuple->t_self, tuple); } ReleaseSysCache(authmem_tuple); diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c index d7dda6a7b8..7e88f97f08 100644 --- a/src/backend/replication/logical/origin.c +++ b/src/backend/replication/logical/origin.c @@ -299,8 +299,7 @@ replorigin_create(char *roname) values[Anum_pg_replication_origin_roname - 1] = roname_d; tuple = heap_form_tuple(RelationGetDescr(rel), values, nulls); - simple_heap_insert(rel, tuple); - CatalogUpdateIndexes(rel, tuple); + CatalogTupleInsert(rel, tuple); CommandCounterIncrement(); break; } diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c index 481868bf53..396c36f181 100644 --- a/src/backend/rewrite/rewriteDefine.c +++ b/src/backend/rewrite/rewriteDefine.c @@ -124,7 +124,7 @@ InsertRule(char *rulname, tup = heap_modify_tuple(oldtup, RelationGetDescr(pg_rewrite_desc), values, nulls, replaces); - simple_heap_update(pg_rewrite_desc, &tup->t_self, tup); + CatalogTupleUpdate(pg_rewrite_desc, &tup->t_self, tup); ReleaseSysCache(oldtup); @@ -135,11 +135,9 @@ InsertRule(char *rulname, { tup = heap_form_tuple(pg_rewrite_desc->rd_att, values, nulls); - rewriteObjectId = simple_heap_insert(pg_rewrite_desc, tup); + rewriteObjectId = CatalogTupleInsert(pg_rewrite_desc, tup); } - /* Need to update indexes in either case */ - CatalogUpdateIndexes(pg_rewrite_desc, tup); heap_freetuple(tup); @@ -613,8 +611,7 @@ DefineQueryRewrite(char *rulename, classForm->relminmxid = InvalidMultiXactId; classForm->relreplident = REPLICA_IDENTITY_NOTHING; - simple_heap_update(relationRelation, &classTup->t_self, classTup); - CatalogUpdateIndexes(relationRelation, classTup); + CatalogTupleUpdate(relationRelation, &classTup->t_self, classTup); heap_freetuple(classTup); heap_close(relationRelation, RowExclusiveLock); @@ -866,10 +863,7 @@ EnableDisableRule(Relation rel, const char *rulename, { ((Form_pg_rewrite) GETSTRUCT(ruletup))->ev_enabled = CharGetDatum(fires_when); - simple_heap_update(pg_rewrite_desc, &ruletup->t_self, ruletup); - - /* keep system catalog indexes current */ - CatalogUpdateIndexes(pg_rewrite_desc, ruletup); + CatalogTupleUpdate(pg_rewrite_desc, &ruletup->t_self, ruletup); changed = true; } @@ -985,10 +979,7 @@ RenameRewriteRule(RangeVar *relation, const char *oldName, /* OK, do the update */ namestrcpy(&(ruleform->rulename), newName); - simple_heap_update(pg_rewrite_desc, &ruletup->t_self, ruletup); - - /* keep system catalog indexes current */ - CatalogUpdateIndexes(pg_rewrite_desc, ruletup); + CatalogTupleUpdate(pg_rewrite_desc, &ruletup->t_self, ruletup); heap_freetuple(ruletup); heap_close(pg_rewrite_desc, RowExclusiveLock); diff --git a/src/backend/rewrite/rewriteSupport.c b/src/backend/rewrite/rewriteSupport.c index 0154072db1..c4d05d26d4 100644 --- a/src/backend/rewrite/rewriteSupport.c +++ b/src/backend/rewrite/rewriteSupport.c @@ -72,10 +72,7 @@ SetRelationRuleStatus(Oid relationId, bool relHasRules) /* Do the update */ classForm->relhasrules = relHasRules; - simple_heap_update(relationRelation, &tuple->t_self, tuple); - - /* Keep the catalog indexes up to date */ - CatalogUpdateIndexes(relationRelation, tuple); + CatalogTupleUpdate(relationRelation, &tuple->t_self, tuple); } else { diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c index 262b0b271a..15e1b15483 100644 --- a/src/backend/storage/large_object/inv_api.c +++ b/src/backend/storage/large_object/inv_api.c @@ -678,8 +678,7 @@ inv_write(LargeObjectDesc *obj_desc, const char *buf, int nbytes) replace[Anum_pg_largeobject_data - 1] = true; newtup = heap_modify_tuple(oldtuple, RelationGetDescr(lo_heap_r), values, nulls, replace); - simple_heap_update(lo_heap_r, &newtup->t_self, newtup); - CatalogIndexInsert(indstate, newtup); + CatalogTupleUpdate(lo_heap_r, &newtup->t_self, newtup); heap_freetuple(newtup); /* @@ -721,8 +720,7 @@ inv_write(LargeObjectDesc *obj_desc, const char *buf, int nbytes) values[Anum_pg_largeobject_pageno - 1] = Int32GetDatum(pageno); values[Anum_pg_largeobject_data - 1] = PointerGetDatum(&workbuf); newtup = heap_form_tuple(lo_heap_r->rd_att, values, nulls); - simple_heap_insert(lo_heap_r, newtup); - CatalogIndexInsert(indstate, newtup); + CatalogTupleInsert(lo_heap_r, newtup); heap_freetuple(newtup); } pageno++; @@ -850,8 +848,7 @@ inv_truncate(LargeObjectDesc *obj_desc, int64 len) replace[Anum_pg_largeobject_data - 1] = true; newtup = heap_modify_tuple(oldtuple, RelationGetDescr(lo_heap_r), values, nulls, replace); - simple_heap_update(lo_heap_r, &newtup->t_self, newtup); - CatalogIndexInsert(indstate, newtup); + CatalogTupleUpdate(lo_heap_r, &newtup->t_self, newtup); heap_freetuple(newtup); } else @@ -888,8 +885,7 @@ inv_truncate(LargeObjectDesc *obj_desc, int64 len) values[Anum_pg_largeobject_pageno - 1] = Int32GetDatum(pageno); values[Anum_pg_largeobject_data - 1] = PointerGetDatum(&workbuf); newtup = heap_form_tuple(lo_heap_r->rd_att, values, nulls); - simple_heap_insert(lo_heap_r, newtup); - CatalogIndexInsert(indstate, newtup); + CatalogTupleInsert(lo_heap_r, newtup); heap_freetuple(newtup); } diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 26ff7e187a..8a7c560e46 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -3484,8 +3484,7 @@ RelationSetNewRelfilenode(Relation relation, char persistence, classform->relminmxid = minmulti; classform->relpersistence = persistence; - simple_heap_update(pg_class, &tuple->t_self, tuple); - CatalogUpdateIndexes(pg_class, tuple); + CatalogTupleUpdate(pg_class, &tuple->t_self, tuple); heap_freetuple(tuple); diff --git a/src/include/catalog/indexing.h b/src/include/catalog/indexing.h index a3635a4d05..977dc9c7ca 100644 --- a/src/include/catalog/indexing.h +++ b/src/include/catalog/indexing.h @@ -32,7 +32,9 @@ extern CatalogIndexState CatalogOpenIndexes(Relation heapRel); extern void CatalogCloseIndexes(CatalogIndexState indstate); extern void CatalogIndexInsert(CatalogIndexState indstate, HeapTuple heapTuple); -extern void CatalogUpdateIndexes(Relation heapRel, HeapTuple heapTuple); +extern Oid CatalogTupleInsert(Relation heapRel, HeapTuple tup); +extern void CatalogTupleUpdate(Relation heapRel, ItemPointer otid, + HeapTuple tup); /*