@@ -2381,7 +2381,7 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2381
2381
ProcessUtilityContext context , ParamListInfo params ,
2382
2382
DestReceiver * dest , char * completionTag )
2383
2383
{
2384
- bool skipCommand ;
2384
+ bool skipCommand = false ;
2385
2385
MTM_TRACE ("%d: Process utility statement %s\n" , MyProcPid , queryString );
2386
2386
switch (nodeTag (parsetree ))
2387
2387
{
@@ -2467,11 +2467,35 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
2467
2467
"CREATE INDEX CONCURRENTLY" );
2468
2468
2469
2469
relid = RelnameGetRelid (stmt -> relation -> relname );
2470
- rel = heap_open (relid , ShareLock );
2471
- skipCommand = rel -> rd_rel -> relpersistence == RELPERSISTENCE_TEMP ;
2472
- heap_close (rel , NoLock );
2470
+
2471
+ if (OidIsValid (relid ))
2472
+ {
2473
+ rel = heap_open (relid , ShareLock );
2474
+ skipCommand = rel -> rd_rel -> relpersistence == RELPERSISTENCE_TEMP ;
2475
+ heap_close (rel , NoLock );
2476
+ }
2477
+ }
2478
+ break ;
2479
+ case T_DropStmt :
2480
+ {
2481
+ DropStmt * stmt = (DropStmt * ) parsetree ;
2482
+
2483
+ if (stmt -> removeType == OBJECT_TABLE )
2484
+ {
2485
+ RangeVar * rv = makeRangeVarFromNameList (
2486
+ (List * ) lfirst (list_head (stmt -> objects )));
2487
+ Oid relid = RelnameGetRelid (rv -> relname );
2488
+
2489
+ if (OidIsValid (relid ))
2490
+ {
2491
+ Relation rel = heap_open (relid , ShareLock );
2492
+ skipCommand = rel -> rd_rel -> relpersistence == RELPERSISTENCE_TEMP ;
2493
+ heap_close (rel , ShareLock );
2494
+ }
2495
+ }
2473
2496
}
2474
2497
break ;
2498
+ case T_CreateSchemaStmt :
2475
2499
default :
2476
2500
skipCommand = false;
2477
2501
break ;
0 commit comments