@@ -2272,6 +2272,7 @@ static void MtmBroadcastUtilityStmt(char const* sql, bool ignoreError)
2272
2272
if (MtmGUCBufferAllocated && !MtmRunUtilityStmt (conns [i ], MtmGUCBuffer -> data , & utility_errmsg ) && !ignoreError )
2273
2273
{
2274
2274
errorMsg = "Failed to set GUC variables at node %d" ;
2275
+ elog (ERROR , utility_errmsg );
2275
2276
failedNode = i ;
2276
2277
break ;
2277
2278
}
@@ -2454,7 +2455,7 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2454
2455
case T_PrepareStmt :
2455
2456
case T_ExecuteStmt :
2456
2457
case T_DeallocateStmt :
2457
- case T_GrantStmt : /* XXX: we could replicate some of these these */ ;
2458
+ // case T_GrantStmt: /* XXX: we could replicate some of these these */;
2458
2459
//case T_GrantRoleStmt:
2459
2460
//case T_AlterDatabaseStmt:
2460
2461
//case T_AlterDatabaseSetStmt:
@@ -2465,7 +2466,7 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2465
2466
case T_ClusterStmt : /* XXX: we could replicate these */ ;
2466
2467
case T_VacuumStmt :
2467
2468
case T_ExplainStmt :
2468
- case T_AlterSystemStmt :
2469
+ // case T_AlterSystemStmt:
2469
2470
case T_VariableShowStmt :
2470
2471
case T_DiscardStmt :
2471
2472
//case T_CreateEventTrigStmt:
@@ -2483,7 +2484,13 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2483
2484
break ;
2484
2485
case T_VariableSetStmt :
2485
2486
{
2486
- //VariableSetStmt *stmt = (VariableSetStmt *) parsetree;
2487
+ VariableSetStmt * stmt = (VariableSetStmt * ) parsetree ;
2488
+
2489
+ skipCommand = true;
2490
+
2491
+ /* Prevent SET TRANSACTION from replication */
2492
+ if (MtmTx .isTransactionBlock || stmt -> kind == VAR_SET_MULTI )
2493
+ break ;
2487
2494
2488
2495
if (!MtmGUCBufferAllocated )
2489
2496
{
@@ -2502,8 +2509,6 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2502
2509
//appendStringInfoString(MtmGUCBuffer, "; ");
2503
2510
2504
2511
appendStringInfoString (MtmGUCBuffer , queryString );
2505
-
2506
- skipCommand = true;
2507
2512
}
2508
2513
break ;
2509
2514
case T_CreateStmt :
@@ -2530,7 +2535,7 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2530
2535
{
2531
2536
rel = heap_open (relid , ShareLock );
2532
2537
skipCommand = rel -> rd_rel -> relpersistence == RELPERSISTENCE_TEMP ;
2533
- heap_close (rel , NoLock );
2538
+ heap_close (rel , ShareLock );
2534
2539
}
2535
2540
}
2536
2541
break ;
0 commit comments