@@ -2245,6 +2245,7 @@ static void MtmBroadcastUtilityStmt(char const* sql, bool ignoreError)
2245
2245
if (MtmGUCBufferAllocated && !MtmRunUtilityStmt (conns [i ], MtmGUCBuffer -> data , & utility_errmsg ) && !ignoreError )
2246
2246
{
2247
2247
errorMsg = "Failed to set GUC variables at node %d" ;
2248
+ elog (ERROR , utility_errmsg );
2248
2249
failedNode = i ;
2249
2250
break ;
2250
2251
}
@@ -2431,7 +2432,7 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2431
2432
case T_PrepareStmt :
2432
2433
case T_ExecuteStmt :
2433
2434
case T_DeallocateStmt :
2434
- case T_GrantStmt : /* XXX: we could replicate some of these these */ ;
2435
+ // case T_GrantStmt: /* XXX: we could replicate some of these these */;
2435
2436
//case T_GrantRoleStmt:
2436
2437
//case T_AlterDatabaseStmt:
2437
2438
//case T_AlterDatabaseSetStmt:
@@ -2442,7 +2443,7 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2442
2443
case T_ClusterStmt : /* XXX: we could replicate these */ ;
2443
2444
case T_VacuumStmt :
2444
2445
case T_ExplainStmt :
2445
- case T_AlterSystemStmt :
2446
+ // case T_AlterSystemStmt:
2446
2447
case T_VariableShowStmt :
2447
2448
case T_DiscardStmt :
2448
2449
//case T_CreateEventTrigStmt:
@@ -2460,7 +2461,13 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2460
2461
break ;
2461
2462
case T_VariableSetStmt :
2462
2463
{
2463
- //VariableSetStmt *stmt = (VariableSetStmt *) parsetree;
2464
+ VariableSetStmt * stmt = (VariableSetStmt * ) parsetree ;
2465
+
2466
+ skipCommand = true;
2467
+
2468
+ /* Prevent SET TRANSACTION from replication */
2469
+ if (MtmTx .isTransactionBlock || stmt -> kind == VAR_SET_MULTI )
2470
+ break ;
2464
2471
2465
2472
if (!MtmGUCBufferAllocated )
2466
2473
{
@@ -2479,8 +2486,6 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2479
2486
//appendStringInfoString(MtmGUCBuffer, "; ");
2480
2487
2481
2488
appendStringInfoString (MtmGUCBuffer , queryString );
2482
-
2483
- skipCommand = true;
2484
2489
}
2485
2490
break ;
2486
2491
case T_CreateStmt :
@@ -2507,7 +2512,7 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2507
2512
{
2508
2513
rel = heap_open (relid , ShareLock );
2509
2514
skipCommand = rel -> rd_rel -> relpersistence == RELPERSISTENCE_TEMP ;
2510
- heap_close (rel , NoLock );
2515
+ heap_close (rel , ShareLock );
2511
2516
}
2512
2517
}
2513
2518
break ;
0 commit comments