@@ -2274,6 +2274,7 @@ static void MtmBroadcastUtilityStmt(char const* sql, bool ignoreError)
2274
2274
if (MtmGUCBufferAllocated && !MtmRunUtilityStmt (conns [i ], MtmGUCBuffer -> data , & utility_errmsg ) && !ignoreError )
2275
2275
{
2276
2276
errorMsg = "Failed to set GUC variables at node %d" ;
2277
+ elog (ERROR , utility_errmsg );
2277
2278
failedNode = i ;
2278
2279
break ;
2279
2280
}
@@ -2460,7 +2461,7 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2460
2461
case T_PrepareStmt :
2461
2462
case T_ExecuteStmt :
2462
2463
case T_DeallocateStmt :
2463
- case T_GrantStmt : /* XXX: we could replicate some of these these */ ;
2464
+ // case T_GrantStmt: /* XXX: we could replicate some of these these */;
2464
2465
//case T_GrantRoleStmt:
2465
2466
//case T_AlterDatabaseStmt:
2466
2467
//case T_AlterDatabaseSetStmt:
@@ -2471,7 +2472,7 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2471
2472
case T_ClusterStmt : /* XXX: we could replicate these */ ;
2472
2473
case T_VacuumStmt :
2473
2474
case T_ExplainStmt :
2474
- case T_AlterSystemStmt :
2475
+ // case T_AlterSystemStmt:
2475
2476
case T_VariableShowStmt :
2476
2477
case T_DiscardStmt :
2477
2478
//case T_CreateEventTrigStmt:
@@ -2489,7 +2490,13 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2489
2490
break ;
2490
2491
case T_VariableSetStmt :
2491
2492
{
2492
- //VariableSetStmt *stmt = (VariableSetStmt *) parsetree;
2493
+ VariableSetStmt * stmt = (VariableSetStmt * ) parsetree ;
2494
+
2495
+ skipCommand = true;
2496
+
2497
+ /* Prevent SET TRANSACTION from replication */
2498
+ if (MtmTx .isTransactionBlock || stmt -> kind == VAR_SET_MULTI )
2499
+ break ;
2493
2500
2494
2501
if (!MtmGUCBufferAllocated )
2495
2502
{
@@ -2508,8 +2515,6 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2508
2515
//appendStringInfoString(MtmGUCBuffer, "; ");
2509
2516
2510
2517
appendStringInfoString (MtmGUCBuffer , queryString );
2511
-
2512
- skipCommand = true;
2513
2518
}
2514
2519
break ;
2515
2520
case T_CreateStmt :
@@ -2536,7 +2541,7 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2536
2541
{
2537
2542
rel = heap_open (relid , ShareLock );
2538
2543
skipCommand = rel -> rd_rel -> relpersistence == RELPERSISTENCE_TEMP ;
2539
- heap_close (rel , NoLock );
2544
+ heap_close (rel , ShareLock );
2540
2545
}
2541
2546
}
2542
2547
break ;
0 commit comments