aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/catalog/heap.c10
-rw-r--r--src/backend/commands/analyze.c11
2 files changed, 18 insertions, 3 deletions
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 5b49cc5a098..bdd413f01b0 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -2856,6 +2856,7 @@ CopyStatistics(Oid fromrelid, Oid torelid)
SysScanDesc scan;
ScanKeyData key[1];
Relation statrel;
+ CatalogIndexState indstate = NULL;
statrel = table_open(StatisticRelationId, RowExclusiveLock);
@@ -2878,13 +2879,20 @@ CopyStatistics(Oid fromrelid, Oid torelid)
/* update the copy of the tuple and insert it */
statform->starelid = torelid;
- CatalogTupleInsert(statrel, tup);
+
+ /* fetch index information when we know we need it */
+ if (indstate == NULL)
+ indstate = CatalogOpenIndexes(statrel);
+
+ CatalogTupleInsertWithInfo(statrel, tup, indstate);
heap_freetuple(tup);
}
systable_endscan(scan);
+ if (indstate != NULL)
+ CatalogCloseIndexes(indstate);
table_close(statrel, RowExclusiveLock);
}
diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c
index ff1354812bd..bf0ec8b3744 100644
--- a/src/backend/commands/analyze.c
+++ b/src/backend/commands/analyze.c
@@ -1624,6 +1624,7 @@ update_attstats(Oid relid, bool inh, int natts, VacAttrStats **vacattrstats)
{
Relation sd;
int attno;
+ CatalogIndexState indstate = NULL;
if (natts <= 0)
return; /* nothing to do */
@@ -1725,6 +1726,10 @@ update_attstats(Oid relid, bool inh, int natts, VacAttrStats **vacattrstats)
Int16GetDatum(stats->attr->attnum),
BoolGetDatum(inh));
+ /* Open index information when we know we need it */
+ if (indstate == NULL)
+ indstate = CatalogOpenIndexes(sd);
+
if (HeapTupleIsValid(oldtup))
{
/* Yes, replace it */
@@ -1734,18 +1739,20 @@ update_attstats(Oid relid, bool inh, int natts, VacAttrStats **vacattrstats)
nulls,
replaces);
ReleaseSysCache(oldtup);
- CatalogTupleUpdate(sd, &stup->t_self, stup);
+ CatalogTupleUpdateWithInfo(sd, &stup->t_self, stup, indstate);
}
else
{
/* No, insert new tuple */
stup = heap_form_tuple(RelationGetDescr(sd), values, nulls);
- CatalogTupleInsert(sd, stup);
+ CatalogTupleInsertWithInfo(sd, stup, indstate);
}
heap_freetuple(stup);
}
+ if (indstate != NULL)
+ CatalogCloseIndexes(indstate);
table_close(sd, RowExclusiveLock);
}