diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index ca4b15ef2f..f3bcba9143 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -12,7 +12,7 @@ * 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 $ * *------------------------------------------------------------------------- */ @@ -1008,28 +1008,39 @@ selectDumpableTable(TableInfo *tbinfo) /* * 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) - tinfo->dobj.dump = false; - /* 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) + if (OidIsValid(tinfo->typrelid) && + tinfo->typrelkind != RELKIND_COMPOSITE_TYPE) + { + tinfo->dobj.dump = false; + tinfo->dobj.objType = DO_DUMMY_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; } @@ -2310,16 +2321,6 @@ getTypes(int *numTypes) 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 @@ -5836,8 +5837,8 @@ dumpDumpableObject(Archive *fout, DumpableObject *dobj) 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); diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h index 0e938c851e..d77d7d32ad 100644 --- a/src/bin/pg_dump/pg_dump.h +++ b/src/bin/pg_dump/pg_dump.h @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.h,v 1.146 2009/01/07 03:39:33 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.h,v 1.147 2009/01/18 20:44:45 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -107,7 +107,7 @@ typedef enum DO_PROCLANG, DO_CAST, DO_TABLE_DATA, - DO_TABLE_TYPE, + DO_DUMMY_TYPE, DO_TSPARSER, DO_TSDICT, DO_TSTEMPLATE, diff --git a/src/bin/pg_dump/pg_dump_sort.c b/src/bin/pg_dump/pg_dump_sort.c index db08442de1..76484dde3e 100644 --- a/src/bin/pg_dump/pg_dump_sort.c +++ b/src/bin/pg_dump/pg_dump_sort.c @@ -9,7 +9,7 @@ * * * 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 $ * *------------------------------------------------------------------------- */ @@ -22,7 +22,9 @@ static const char *modulename = gettext_noop("sorter"); * 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[] = { @@ -45,7 +47,7 @@ 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 */ @@ -71,25 +73,25 @@ static const int newObjectTypePriority[] = 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 */ }; @@ -1102,9 +1104,9 @@ describeDumpableObject(DumpableObject *obj, char *buf, int bufsize) "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: