funinfo = getFuncs(&numFuncs);
    funinfoindex = buildIndexArray(funinfo, numFuncs, sizeof(FuncInfo));
 
-   /* this must be after getFuncs */
+   /* this must be after getTables and getFuncs */
    if (g_verbose)
        write_msg(NULL, "reading user-defined types\n");
    typinfo = getTypes(&numTypes);
 
  * If it's a table's rowtype or an autogenerated array type, we also apply a
  * special type code to facilitate sorting into the desired order. (We don't
  * want to consider those to be ordinary types because that would bring tables
- * up into the datatype part of the dump order.)  Those tests should be made
- * first to ensure the objType change is applied regardless of namespace etc.
+ * up into the datatype part of the dump order.)  We still set the object's
+ * dump flag; that's not going to cause the dummy type to be dumped, but we
+ * need it so that casts involving such types will be dumped correctly -- see
+ * dumpCast.  This means the flag should be set the same as for the underlying
+ * object (the table or base type).
  */
 static void
 selectDumpableType(TypeInfo *tyinfo)
    if (OidIsValid(tyinfo->typrelid) &&
        tyinfo->typrelkind != RELKIND_COMPOSITE_TYPE)
    {
-       tyinfo->dobj.dump = false;
+       TableInfo  *tytable = findTableByOid(tyinfo->typrelid);
+
        tyinfo->dobj.objType = DO_DUMMY_TYPE;
+       if (tytable != NULL)
+           tyinfo->dobj.dump = tytable->dobj.dump;
+       else
+           tyinfo->dobj.dump = false;
+       return;
    }
 
    /* skip auto-generated array types */
-   else if (tyinfo->isArray)
+   if (tyinfo->isArray)
    {
-       tyinfo->dobj.dump = false;
        tyinfo->dobj.objType = DO_DUMMY_TYPE;
+       /*
+        * Fall through to set the dump flag; we assume that the subsequent
+        * rules will do the same thing as they would for the array's base
+        * type.  (We cannot reliably look up the base type here, since
+        * getTypes may not have processed it yet.)
+        */
    }
 
    /* dump only types in dumpable namespaces */
-   else if (!tyinfo->dobj.namespace->dobj.dump)
+   if (!tyinfo->dobj.namespace->dobj.dump)
        tyinfo->dobj.dump = false;
 
    /* skip undefined placeholder types */