From 18efdde10ebbaab09e8d166e271d4dac01461a68 Mon Sep 17 00:00:00 2001 From: Matthias van de Meent Date: Mon, 30 Mar 2026 17:15:24 +0200 Subject: [PATCH v2] nodeModifyTable: fix generated tables memory leak/perf issue The code assumed that ri_GeneratedExprsU would always contain a list of expressions if the generated colums were checked, but that's not correct. Reported-by: "Anton A. Melnikov" --- src/backend/executor/nodeModifyTable.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 4cd5e262e0f..09dd502fb8e 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -531,6 +531,7 @@ ExecInitGenerated(ResultRelInfo *resultRelInfo, { /* Don't call twice */ Assert(resultRelInfo->ri_GeneratedExprsU == NULL); + Assert(!resultRelInfo->ri_extraUpdatedCols_valid); resultRelInfo->ri_GeneratedExprsU = ri_GeneratedExprs; resultRelInfo->ri_NumGeneratedNeededU = ri_NumGeneratedNeeded; @@ -575,7 +576,7 @@ ExecComputeStoredGenerated(ResultRelInfo *resultRelInfo, */ if (cmdtype == CMD_UPDATE) { - if (resultRelInfo->ri_GeneratedExprsU == NULL) + if (!resultRelInfo->ri_extraUpdatedCols_valid) ExecInitGenerated(resultRelInfo, estate, cmdtype); if (resultRelInfo->ri_NumGeneratedNeededU == 0) return; -- 2.50.1 (Apple Git-155)