]> granicus.if.org Git - postgresql/commitdiff
Add --exclude-table-data option to pg_dump.
authorAndrew Dunstan <andrew@dunslane.net>
Wed, 14 Dec 2011 14:23:17 +0000 (09:23 -0500)
committerAndrew Dunstan <andrew@dunslane.net>
Wed, 14 Dec 2011 14:23:17 +0000 (09:23 -0500)
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.

doc/src/sgml/ref/pg_dump.sgml
src/bin/pg_dump/pg_dump.c
src/bin/pg_dump/pg_dump.h

index f6f33de7e7e0a41f64265ef376af19be8397704b..98f0ec68f8f37cd55d00a58728e0a0a1d21f0243 100644 (file)
@@ -404,6 +404,10 @@ PostgreSQL documentation
        <para>
         Dump only the object definitions (schema), not data.
        </para>
+       <para>
+        To exclude table data for only a subset of tables in the database, 
+        see <option>--exclude-table-data</>.
+       </para>
       </listitem>
      </varlistentry>
 
@@ -611,6 +615,24 @@ PostgreSQL documentation
       </listitem>
      </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>
       <term><option>--inserts</option></term>
       <listitem>
index afeae6f9f7fd6c949b7e1b1b4a6b409296fc972b..2fa99dd0bbdff4a87965c23274f7e0431269750c 100644 (file)
@@ -115,6 +115,8 @@ static SimpleStringList table_include_patterns = {NULL, NULL};
 static SimpleOidList table_include_oids = {NULL, NULL};
 static SimpleStringList table_exclude_patterns = {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 */
 static bool include_everything = true;
@@ -324,6 +326,7 @@ main(int argc, char **argv)
                {"column-inserts", no_argument, &column_inserts, 1},
                {"disable-dollar-quoting", no_argument, &disable_dollar_quoting, 1},
                {"disable-triggers", no_argument, &disable_triggers, 1},
+               {"exclude-table-data", required_argument, NULL, 4},
                {"inserts", no_argument, &dump_inserts, 1},
                {"lock-wait-timeout", required_argument, NULL, 2},
                {"no-tablespaces", no_argument, &outputNoTablespaces, 1},
@@ -487,6 +490,10 @@ main(int argc, char **argv)
                                use_role = optarg;
                                break;
 
+                       case 4:                 /* exclude table(s) data */
+                               simple_string_list_append(&tabledata_exclude_patterns, optarg);
+                               break;
+
                        default:
                                fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
                                exit(1);
@@ -715,6 +722,10 @@ main(int argc, char **argv)
        }
        expand_table_name_patterns(&table_exclude_patterns,
                                                           &table_exclude_oids);
+
+       expand_table_name_patterns(&tabledata_exclude_patterns,
+                                                          &tabledata_exclude_oids);
+
        /* 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(_("  --disable-dollar-quoting    disable dollar quoting, use SQL standard quoting\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(_("  --no-security-labels        do not dump security label 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,
                                                           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;
+               
 }
 
 /*
@@ -1518,6 +1539,10 @@ 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 */
index c248e755992bb68f8e02fdd84a8c4ae3959a392b..31442f1622d76442fdee07d7ece7adb7a0469075 100644 (file)
@@ -129,6 +129,7 @@ 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 */