On Wed, Apr 20, 2022 at 10:47:07AM +0800, Julien Rouhaud wrote:
> 
> AFAICT the problem is that SET / RESET part is messing with the HeapTuple, so
> you can't use the procForm reference afterwards.  Simply processing
> parallel_item before set_items fixes the problem, as in the attached.

This time with the file.
diff --git a/src/backend/commands/functioncmds.c 
b/src/backend/commands/functioncmds.c
index 91f02a7eb2..c227fbde19 100644
--- a/src/backend/commands/functioncmds.c
+++ b/src/backend/commands/functioncmds.c
@@ -1472,6 +1472,8 @@ AlterFunction(ParseState *pstate, AlterFunctionStmt *stmt)
 
                procForm->prosupport = newsupport;
        }
+       if (parallel_item)
+               procForm->proparallel = interpret_func_parallel(parallel_item);
        if (set_items)
        {
                Datum           datum;
@@ -1506,8 +1508,6 @@ AlterFunction(ParseState *pstate, AlterFunctionStmt *stmt)
                tup = heap_modify_tuple(tup, RelationGetDescr(rel),
                                                                repl_val, 
repl_null, repl_repl);
        }
-       if (parallel_item)
-               procForm->proparallel = interpret_func_parallel(parallel_item);
 
        /* Do the update */
        CatalogTupleUpdate(rel, &tup->t_self, tup);

Reply via email to