From f9b28194eb1229f467a9a889dd186e1ae5ea8eaf Mon Sep 17 00:00:00 2001 From: congzhou2603 Date: Wed, 31 Jul 2024 10:19:49 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90bugfix=E3=80=91=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=8C=89=E9=9C=80=E5=9B=9E=E6=94=BE=E4=B8=8D=E6=94=AF=E6=8C=81?= =?UTF-8?q?reindex=20database=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gausskernel/process/tcop/utility.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/gausskernel/process/tcop/utility.cpp b/src/gausskernel/process/tcop/utility.cpp index 12154a8ac..ea05f3c76 100755 --- a/src/gausskernel/process/tcop/utility.cpp +++ b/src/gausskernel/process/tcop/utility.cpp @@ -13908,13 +13908,15 @@ struct OndemandParseInfo { NodeTag parseType; ObjectType objectType; RangeVar* relationRangeVar; + const char* dbName; }; -static List* AppendItemToOndemandParseList(List* ondemandParseList, NodeTag parseType, ObjectType objectType, RangeVar* relationRangeVar) { +static List* AppendItemToOndemandParseList(List* ondemandParseList, NodeTag parseType, ObjectType objectType, RangeVar* relationRangeVar, const char* dbName = NULL) { OndemandParseInfo* info = (OndemandParseInfo*)palloc(sizeof(OndemandParseInfo)); info->parseType = parseType; info->objectType = objectType; info->relationRangeVar = relationRangeVar; + info->dbName = dbName; ondemandParseList = lappend(ondemandParseList, info); return ondemandParseList; } @@ -14011,7 +14013,8 @@ static void PreRedoInOndemandRecovery(Node* parseTree) { case T_ReindexStmt: { ReindexStmt* reindexStmt = (ReindexStmt*) parseTree; ondemandParseList = AppendItemToOndemandParseList(ondemandParseList, T_ReindexStmt, - reindexStmt->kind, reindexStmt->relation); + reindexStmt->kind, reindexStmt->relation, + reindexStmt->kind == OBJECT_DATABASE ? reindexStmt->name : NULL); break; } /* ALTER TABLE/INDEX/PROCEDURE/ SET SCHEMA */ @@ -14045,7 +14048,17 @@ static void PreRedoInOndemandRecovery(Node* parseTree) { case T_AlterOwnerStmt: { break; } - case T_ReindexStmt: + case T_ReindexStmt: { + const char* dbName = ondemandParseInfo->dbName; + Oid dbOid = get_database_oid_by_name(dbName); + if (!OidIsValid(dbOid)) { + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_OBJECT), errmsg("Database \"%s\" does not exist.", dbName))); + break; + } + RedoDatabaseForOndemandExtremeRTO(dbOid); + break; + } default: { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("[On-demand] Not support this sql in ondemand redo phase, nodeType: %d, relKind: %d.",