* by PostgreSQL
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.513 2009/01/06 18:01:57 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.514 2009/01/18 20:44:45 tgl Exp $
*
*-------------------------------------------------------------------------
*/
/*
* selectDumpableType: policy-setting subroutine
* Mark a type as to be dumped or not
+ *
+ * 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.
*/
static void
selectDumpableType(TypeInfo *tinfo)
{
- /* Dump only types in dumpable namespaces */
- if (!tinfo->dobj.namespace->dobj.dump)
+ /* skip complex types, except for standalone composite types */
+ if (OidIsValid(tinfo->typrelid) &&
+ tinfo->typrelkind != RELKIND_COMPOSITE_TYPE)
+ {
tinfo->dobj.dump = false;
+ tinfo->dobj.objType = DO_DUMMY_TYPE;
+ }
- /* skip complex types, except for standalone composite types */
- /* (note: this test should now be unnecessary) */
- else if (OidIsValid(tinfo->typrelid) &&
- tinfo->typrelkind != RELKIND_COMPOSITE_TYPE)
+ /* skip auto-generated array types */
+ else if (tinfo->isArray)
+ {
+ tinfo->dobj.dump = false;
+ tinfo->dobj.objType = DO_DUMMY_TYPE;
+ }
+
+ /* dump only types in dumpable namespaces */
+ else if (!tinfo->dobj.namespace->dobj.dump)
tinfo->dobj.dump = false;
/* skip undefined placeholder types */
else if (!tinfo->isDefined)
tinfo->dobj.dump = false;
- /* skip auto-generated array types */
- else if (tinfo->isArray)
- tinfo->dobj.dump = false;
-
else
tinfo->dobj.dump = true;
}
tinfo[i].typtype = *PQgetvalue(res, i, i_typtype);
tinfo[i].shellType = NULL;
- /*
- * If it's a table's rowtype, use special type code to facilitate
- * sorting into the desired order. (We don't want to consider it an
- * ordinary type because that would bring the table up into the
- * datatype part of the dump order.)
- */
- if (OidIsValid(tinfo[i].typrelid) &&
- tinfo[i].typrelkind != RELKIND_COMPOSITE_TYPE)
- tinfo[i].dobj.objType = DO_TABLE_TYPE;
-
if (strcmp(PQgetvalue(res, i, i_typisdefined), "t") == 0)
tinfo[i].isDefined = true;
else
case DO_TABLE_DATA:
dumpTableData(fout, (TableDataInfo *) dobj);
break;
- case DO_TABLE_TYPE:
- /* table rowtypes are never dumped separately */
+ case DO_DUMMY_TYPE:
+ /* table rowtypes and array types are never dumped separately */
break;
case DO_TSPARSER:
dumpTSParser(fout, (TSParserInfo *) dobj);
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump_sort.c,v 1.23 2009/01/01 17:23:54 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump_sort.c,v 1.24 2009/01/18 20:44:45 tgl Exp $
*
*-------------------------------------------------------------------------
*/
* Sort priority for object types when dumping a pre-7.3 database.
* Objects are sorted by priority levels, and within an equal priority level
* by OID. (This is a relatively crude hack to provide semi-reasonable
- * behavior for old databases without full dependency info.)
+ * behavior for old databases without full dependency info.) Note: text
+ * search and foreign-data objects can't really happen here, so the rather
+ * bogus priorities for them don't matter.
*/
static const int oldObjectTypePriority[] =
{
2, /* DO_PROCLANG */
2, /* DO_CAST */
9, /* DO_TABLE_DATA */
- 7, /* DO_TABLE_TYPE */
+ 7, /* DO_DUMMY_TYPE */
3, /* DO_TSPARSER */
4, /* DO_TSDICT */
3, /* DO_TSTEMPLATE */
7, /* DO_OPCLASS */
7, /* DO_OPFAMILY */
9, /* DO_CONVERSION */
- 10, /* DO_TABLE */
- 12, /* DO_ATTRDEF */
- 17, /* DO_INDEX */
- 18, /* DO_RULE */
- 19, /* DO_TRIGGER */
- 16, /* DO_CONSTRAINT */
- 20, /* DO_FK_CONSTRAINT */
+ 16, /* DO_TABLE */
+ 18, /* DO_ATTRDEF */
+ 23, /* DO_INDEX */
+ 24, /* DO_RULE */
+ 25, /* DO_TRIGGER */
+ 22, /* DO_CONSTRAINT */
+ 26, /* DO_FK_CONSTRAINT */
2, /* DO_PROCLANG */
8, /* DO_CAST */
- 13, /* DO_TABLE_DATA */
- 11, /* DO_TABLE_TYPE */
- 5, /* DO_TSPARSER */
- 6, /* DO_TSDICT */
- 5, /* DO_TSTEMPLATE */
- 7, /* DO_TSCONFIG */
- 3, /* DO_FDW */
- 4, /* DO_FOREIGN_SERVER */
- 14, /* DO_BLOBS */
- 15 /* DO_BLOB_COMMENTS */
+ 19, /* DO_TABLE_DATA */
+ 17, /* DO_DUMMY_TYPE */
+ 10, /* DO_TSPARSER */
+ 12, /* DO_TSDICT */
+ 11, /* DO_TSTEMPLATE */
+ 13, /* DO_TSCONFIG */
+ 14, /* DO_FDW */
+ 15, /* DO_FOREIGN_SERVER */
+ 20, /* DO_BLOBS */
+ 21 /* DO_BLOB_COMMENTS */
};
"TABLE DATA %s (ID %d OID %u)",
obj->name, obj->dumpId, obj->catId.oid);
return;
- case DO_TABLE_TYPE:
+ case DO_DUMMY_TYPE:
snprintf(buf, bufsize,
- "TABLE TYPE %s (ID %d OID %u)",
+ "DUMMY TYPE %s (ID %d OID %u)",
obj->name, obj->dumpId, obj->catId.oid);
return;
case DO_TSPARSER: