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(); } }