diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/pg_dump/pg_dump.c | 77 | ||||
-rw-r--r-- | src/bin/pg_dump/pg_dump.h | 1 |
2 files changed, 42 insertions, 36 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index daafc2bc000..c91e0983f4d 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -1140,15 +1140,6 @@ selectDumpableTable(TableInfo *tbinfo) simple_oid_list_member(&table_exclude_oids, tbinfo->dobj.catId.oid)) tbinfo->dobj.dump = false; - - /* If table is to be dumped, check that the data is not excluded */ - if (tbinfo->dobj.dump && ! - simple_oid_list_member(&tabledata_exclude_oids, - tbinfo->dobj.catId.oid)) - tbinfo->dobj.dumpdata = true; - else - tbinfo->dobj.dumpdata = false; - } /* @@ -1599,10 +1590,6 @@ dumpTableData(Archive *fout, TableDataInfo *tdinfo) DataDumperPtr dumpFn; char *copyStmt; - /* don't do anything if the data isn't wanted */ - if (!tbinfo->dobj.dumpdata) - return; - if (!dump_inserts) { /* Dump/restore using COPY */ @@ -1644,33 +1631,50 @@ getTableData(TableInfo *tblinfo, int numTables, bool oids) for (i = 0; i < numTables; i++) { - /* Skip VIEWs (no data to dump) */ - if (tblinfo[i].relkind == RELKIND_VIEW) - continue; - /* Skip SEQUENCEs (handled elsewhere) */ - if (tblinfo[i].relkind == RELKIND_SEQUENCE) - continue; - /* Skip FOREIGN TABLEs (no data to dump) */ - if (tblinfo[i].relkind == RELKIND_FOREIGN_TABLE) - continue; - /* Skip unlogged tables if so requested */ - if (tblinfo[i].relpersistence == RELPERSISTENCE_UNLOGGED - && no_unlogged_table_data) - continue; - - if (tblinfo[i].dobj.dump && tblinfo[i].dataObj == NULL) + if (tblinfo[i].dobj.dump) makeTableDataInfo(&(tblinfo[i]), oids); } } /* * Make a dumpable object for the data of this specific table + * + * Note: we make a TableDataInfo if and only if we are going to dump the + * table data; the "dump" flag in such objects isn't used. */ static void makeTableDataInfo(TableInfo *tbinfo, bool oids) { TableDataInfo *tdinfo; + /* + * Nothing to do if we already decided to dump the table. This will + * happen for "config" tables. + */ + if (tbinfo->dataObj != NULL) + return; + + /* Skip VIEWs (no data to dump) */ + if (tbinfo->relkind == RELKIND_VIEW) + return; + /* Skip SEQUENCEs (handled elsewhere) */ + if (tbinfo->relkind == RELKIND_SEQUENCE) + return; + /* Skip FOREIGN TABLEs (no data to dump) */ + if (tbinfo->relkind == RELKIND_FOREIGN_TABLE) + return; + + /* Don't dump data in unlogged tables, if so requested */ + if (tbinfo->relpersistence == RELPERSISTENCE_UNLOGGED && + no_unlogged_table_data) + return; + + /* Check that the data is not explicitly excluded */ + if (simple_oid_list_member(&tabledata_exclude_oids, + tbinfo->dobj.catId.oid)) + return; + + /* OK, let's dump it */ tdinfo = (TableDataInfo *) pg_malloc(sizeof(TableDataInfo)); tdinfo->dobj.objType = DO_TABLE_DATA; @@ -14127,14 +14131,17 @@ getExtensionMembership(Archive *fout, ExtensionInfo extinfo[], TableInfo *configtbl; configtbl = findTableByOid(atooid(extconfigarray[j])); - if (configtbl && configtbl->dataObj == NULL) + if (configtbl == NULL) + continue; + + /* + * Note: config tables are dumped without OIDs regardless + * of the --oids setting. This is because row filtering + * conditions aren't compatible with dumping OIDs. + */ + makeTableDataInfo(configtbl, false); + if (configtbl->dataObj != NULL) { - /* - * Note: config tables are dumped without OIDs regardless - * of the --oids setting. This is because row filtering - * conditions aren't compatible with dumping OIDs. - */ - makeTableDataInfo(configtbl, false); if (strlen(extconditionarray[j]) > 0) configtbl->dataObj->filtercond = pg_strdup(extconditionarray[j]); } diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h index 266047ddeb1..44f7c6bdf0a 100644 --- a/src/bin/pg_dump/pg_dump.h +++ b/src/bin/pg_dump/pg_dump.h @@ -129,7 +129,6 @@ typedef struct _dumpableObject char *name; /* object name (should never be NULL) */ struct _namespaceInfo *namespace; /* containing namespace, or NULL */ bool dump; /* true if we want to dump this object */ - bool dumpdata; /* true if we want data for this object */ bool ext_member; /* true if object is member of extension */ DumpId *dependencies; /* dumpIds of objects this one depends on */ int nDeps; /* number of valid dependencies */ |