diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
new file mode 100644
index 51391f6..71d2b62
*** a/src/backend/utils/adt/ruleutils.c
--- b/src/backend/utils/adt/ruleutils.c
*************** set_rtable_names(deparse_namespace *dpns
*** 2676,2681 ****
--- 2676,2683 ----
  {
  	ListCell   *lc;
  	int			rtindex = 1;
+ 	int 		pathology_count	= 0;
+ 	int 		global_i	= 0;
  
  	dpns->rtable_names = NIL;
  	foreach(lc, dpns->rtable)
*************** set_rtable_names(deparse_namespace *dpns
*** 2718,2732 ****
  			char	   *modname = (char *) palloc(strlen(refname) + 32);
  			int			i = 0;
  
! 			do
  			{
! 				sprintf(modname, "%s_%d", refname, ++i);
! 			} while (!refname_is_unique(modname, dpns, parent_namespaces));
! 			refname = modname;
  		}
  
  		dpns->rtable_names = lappend(dpns->rtable_names, refname);
  		rtindex++;
  	}
  }
  
--- 2720,2746 ----
  			char	   *modname = (char *) palloc(strlen(refname) + 32);
  			int			i = 0;
  
! 			if (pathology_count>10) {
! 				do
! 				{
! 					sprintf(modname, "%s_%d", refname, ++global_i);
! 				} while (!refname_is_unique(modname, dpns, parent_namespaces));
! 				refname = modname;
! 			}
! 			else
  			{
! 				do
! 				{
! 					sprintf(modname, "%s_%d", refname, ++i);
! 				} while (!refname_is_unique(modname, dpns, parent_namespaces));
! 				refname = modname;
! 				if (i > 10) pathology_count++;
! 			};
  		}
  
  		dpns->rtable_names = lappend(dpns->rtable_names, refname);
  		rtindex++;
+ 		CHECK_FOR_INTERRUPTS();
  	}
  }
  
