@@ -2381,7 +2381,7 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
23812381 ProcessUtilityContext context , ParamListInfo params ,
23822382 DestReceiver * dest , char * completionTag )
23832383{
2384- bool skipCommand ;
2384+ bool skipCommand = false ;
23852385 MTM_TRACE ("%d: Process utility statement %s\n" , MyProcPid , queryString );
23862386 switch (nodeTag (parsetree ))
23872387 {
@@ -2467,11 +2467,35 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
24672467 "CREATE INDEX CONCURRENTLY" );
24682468
24692469 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+ }
24732496 }
24742497 break ;
2498+ case T_CreateSchemaStmt :
24752499 default :
24762500 skipCommand = false;
24772501 break ;
0 commit comments