mirror of
https://github.com/postgres/postgres.git
synced 2025-04-27 22:56:53 +03:00
Add --exclude-table-data option to pg_dump.
Andrew Dunstan, reviewed by Josh Berkus, Robert Haas and Peter Geoghegan. This allows dumping of a table definition but not its data, on a per table basis. Table name patterns are supported just as for --exclude-table.
This commit is contained in:
parent
4adead1d22
commit
7b070e896c
@ -404,6 +404,10 @@ PostgreSQL documentation
|
|||||||
<para>
|
<para>
|
||||||
Dump only the object definitions (schema), not data.
|
Dump only the object definitions (schema), not data.
|
||||||
</para>
|
</para>
|
||||||
|
<para>
|
||||||
|
To exclude table data for only a subset of tables in the database,
|
||||||
|
see <option>--exclude-table-data</>.
|
||||||
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
@ -611,6 +615,24 @@ PostgreSQL documentation
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--exclude-table-data=<replaceable class="parameter">table</replaceable></option></term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Do not dump data for any tables matching the <replaceable
|
||||||
|
class="parameter">table</replaceable> pattern. The pattern is
|
||||||
|
interpreted according to the same rules as for <option>-t</>.
|
||||||
|
<option>--exclude-table-data</> can be given more than once to
|
||||||
|
exclude tables matching any of several patterns. This option is
|
||||||
|
useful when you need the definition of a particular table even
|
||||||
|
though you do not need the data in it.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
To exclude data for all tables in the database, see <option>--schema-only</>.
|
||||||
|
<para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><option>--inserts</option></term>
|
<term><option>--inserts</option></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
@ -115,6 +115,8 @@ static SimpleStringList table_include_patterns = {NULL, NULL};
|
|||||||
static SimpleOidList table_include_oids = {NULL, NULL};
|
static SimpleOidList table_include_oids = {NULL, NULL};
|
||||||
static SimpleStringList table_exclude_patterns = {NULL, NULL};
|
static SimpleStringList table_exclude_patterns = {NULL, NULL};
|
||||||
static SimpleOidList table_exclude_oids = {NULL, NULL};
|
static SimpleOidList table_exclude_oids = {NULL, NULL};
|
||||||
|
static SimpleStringList tabledata_exclude_patterns = {NULL, NULL};
|
||||||
|
static SimpleOidList tabledata_exclude_oids = {NULL, NULL};
|
||||||
|
|
||||||
/* default, if no "inclusion" switches appear, is to dump everything */
|
/* default, if no "inclusion" switches appear, is to dump everything */
|
||||||
static bool include_everything = true;
|
static bool include_everything = true;
|
||||||
@ -324,6 +326,7 @@ main(int argc, char **argv)
|
|||||||
{"column-inserts", no_argument, &column_inserts, 1},
|
{"column-inserts", no_argument, &column_inserts, 1},
|
||||||
{"disable-dollar-quoting", no_argument, &disable_dollar_quoting, 1},
|
{"disable-dollar-quoting", no_argument, &disable_dollar_quoting, 1},
|
||||||
{"disable-triggers", no_argument, &disable_triggers, 1},
|
{"disable-triggers", no_argument, &disable_triggers, 1},
|
||||||
|
{"exclude-table-data", required_argument, NULL, 4},
|
||||||
{"inserts", no_argument, &dump_inserts, 1},
|
{"inserts", no_argument, &dump_inserts, 1},
|
||||||
{"lock-wait-timeout", required_argument, NULL, 2},
|
{"lock-wait-timeout", required_argument, NULL, 2},
|
||||||
{"no-tablespaces", no_argument, &outputNoTablespaces, 1},
|
{"no-tablespaces", no_argument, &outputNoTablespaces, 1},
|
||||||
@ -487,6 +490,10 @@ main(int argc, char **argv)
|
|||||||
use_role = optarg;
|
use_role = optarg;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 4: /* exclude table(s) data */
|
||||||
|
simple_string_list_append(&tabledata_exclude_patterns, optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
|
fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -715,6 +722,10 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
expand_table_name_patterns(&table_exclude_patterns,
|
expand_table_name_patterns(&table_exclude_patterns,
|
||||||
&table_exclude_oids);
|
&table_exclude_oids);
|
||||||
|
|
||||||
|
expand_table_name_patterns(&tabledata_exclude_patterns,
|
||||||
|
&tabledata_exclude_oids);
|
||||||
|
|
||||||
/* non-matching exclusion patterns aren't an error */
|
/* non-matching exclusion patterns aren't an error */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -854,6 +865,7 @@ help(const char *progname)
|
|||||||
printf(_(" --column-inserts dump data as INSERT commands with column names\n"));
|
printf(_(" --column-inserts dump data as INSERT commands with column names\n"));
|
||||||
printf(_(" --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n"));
|
printf(_(" --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n"));
|
||||||
printf(_(" --disable-triggers disable triggers during data-only restore\n"));
|
printf(_(" --disable-triggers disable triggers during data-only restore\n"));
|
||||||
|
printf(_(" --exclude-table-data=TABLE do NOT dump data for the named table(s)\n"));
|
||||||
printf(_(" --inserts dump data as INSERT commands, rather than COPY\n"));
|
printf(_(" --inserts dump data as INSERT commands, rather than COPY\n"));
|
||||||
printf(_(" --no-security-labels do not dump security label assignments\n"));
|
printf(_(" --no-security-labels do not dump security label assignments\n"));
|
||||||
printf(_(" --no-tablespaces do not dump tablespace assignments\n"));
|
printf(_(" --no-tablespaces do not dump tablespace assignments\n"));
|
||||||
@ -1087,6 +1099,15 @@ selectDumpableTable(TableInfo *tbinfo)
|
|||||||
simple_oid_list_member(&table_exclude_oids,
|
simple_oid_list_member(&table_exclude_oids,
|
||||||
tbinfo->dobj.catId.oid))
|
tbinfo->dobj.catId.oid))
|
||||||
tbinfo->dobj.dump = false;
|
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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1518,6 +1539,10 @@ dumpTableData(Archive *fout, TableDataInfo *tdinfo)
|
|||||||
DataDumperPtr dumpFn;
|
DataDumperPtr dumpFn;
|
||||||
char *copyStmt;
|
char *copyStmt;
|
||||||
|
|
||||||
|
/* don't do anything if the data isn't wanted */
|
||||||
|
if (!tbinfo->dobj.dumpdata)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!dump_inserts)
|
if (!dump_inserts)
|
||||||
{
|
{
|
||||||
/* Dump/restore using COPY */
|
/* Dump/restore using COPY */
|
||||||
|
@ -129,6 +129,7 @@ typedef struct _dumpableObject
|
|||||||
char *name; /* object name (should never be NULL) */
|
char *name; /* object name (should never be NULL) */
|
||||||
struct _namespaceInfo *namespace; /* containing namespace, or NULL */
|
struct _namespaceInfo *namespace; /* containing namespace, or NULL */
|
||||||
bool dump; /* true if we want to dump this object */
|
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 */
|
bool ext_member; /* true if object is member of extension */
|
||||||
DumpId *dependencies; /* dumpIds of objects this one depends on */
|
DumpId *dependencies; /* dumpIds of objects this one depends on */
|
||||||
int nDeps; /* number of valid dependencies */
|
int nDeps; /* number of valid dependencies */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user