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;
-
}
/*
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 */
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;
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]);
}