From ef528442a8f7c87d4a7068d91d26aa872504247b Mon Sep 17 00:00:00 2001 From: aykutbozkurt Date: Mon, 1 Aug 2022 18:45:59 +0300 Subject: [PATCH] AlterStatisticsSchemaStmtObjectAddress can also be called before standard_ProcessUtility --- src/backend/distributed/commands/statistics.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/backend/distributed/commands/statistics.c b/src/backend/distributed/commands/statistics.c index a85d2db48..f6a9dc610 100644 --- a/src/backend/distributed/commands/statistics.c +++ b/src/backend/distributed/commands/statistics.c @@ -359,9 +359,19 @@ AlterStatisticsSchemaStmtObjectAddress(Node *node, bool missingOk) AlterObjectSchemaStmt *stmt = castNode(AlterObjectSchemaStmt, node); ObjectAddress *address = palloc0(sizeof(ObjectAddress)); - String *statName = llast((List *) stmt->object); - Oid statsOid = get_statistics_object_oid(list_make2(makeString(stmt->newschema), - statName), missingOk); + List *statName = (List *) stmt->object; + Oid statsOid = get_statistics_object_oid(statName, true); + + if (statsOid == InvalidOid) + { + /* + * couldn't find the stat, might have already been moved to the new schema, we + * construct a new stat name that uses the new schema to search in. + */ + List *newStatName = list_make2(makeString(stmt->newschema), llast(statName)); + statsOid = get_statistics_object_oid(newStatName, missingOk); + } + ObjectAddressSet(*address, StatisticExtRelationId, statsOid); return list_make1(address);