pg_restore: Add -N option to exclude schemas
authorPeter Eisentraut <[email protected]>
Tue, 20 Sep 2016 16:00:00 +0000 (12:00 -0400)
committerPeter Eisentraut <[email protected]>
Tue, 20 Sep 2016 16:00:00 +0000 (12:00 -0400)
This is similar to the -N option in pg_dump, except that it doesn't take
a pattern, just like the existing -n option in pg_restore.

From: Michael Banck <[email protected]>

doc/src/sgml/ref/pg_restore.sgml
src/bin/pg_dump/pg_backup.h
src/bin/pg_dump/pg_backup_archiver.c
src/bin/pg_dump/pg_restore.c

index c9069193afcce0901fb289db96f9b9817b365055..bd5b405314529d13b37155fab4679ebec6f78fee 100644 (file)
      </varlistentry>
 
      <varlistentry>
-      <term><option>-n <replaceable class="parameter">namespace</replaceable></option></term>
+      <term><option>-n <replaceable class="parameter">schema</replaceable></option></term>
       <term><option>--schema=<replaceable class="parameter">schema</replaceable></option></term>
       <listitem>
        <para>
       </listitem>
      </varlistentry>
 
+     <varlistentry>
+      <term><option>-N <replaceable class="parameter">schema</replaceable></option></term>
+      <term><option>--exclude-schema=<replaceable class="parameter">schema</replaceable></option></term>
+      <listitem>
+       <para>
+        Do not restore objects that are in the named schema.  Multiple schemas
+        to be excluded may be specified with multiple <option>-N</> switches.
+       </para>
+
+       <para>
+        When both <option>-n</> and <option>-N</> are given for the same
+        schema name, the <option>-N</> switch wins and the schema is excluded.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry>
       <term><option>-O</option></term>
       <term><option>--no-owner</option></term>
index 4afa92f5f674328f74e784c15fe6a4a1334c3526..0a28124cf6061d4f19f618e6dee67b8d99719a75 100644 (file)
@@ -99,6 +99,7 @@ typedef struct _restoreOptions
        SimpleStringList indexNames;
        SimpleStringList functionNames;
        SimpleStringList schemaNames;
+       SimpleStringList schemaExcludeNames;
        SimpleStringList triggerNames;
        SimpleStringList tableNames;
 
index 05bdbdbf02a75357733c4b9c7e2e7b620488001a..a69b06f6d76e90d2de76800f22d6851843ada81f 100644 (file)
@@ -2751,6 +2751,11 @@ _tocEntryRequired(TocEntry *te, teSection curSection, RestoreOptions *ropt)
                        return 0;
        }
 
+       if (ropt->schemaExcludeNames.head != NULL
+               && te->namespace
+               && simple_string_list_member(&ropt->schemaExcludeNames, te->namespace))
+               return 0;
+
        if (ropt->selTypes)
        {
                if (strcmp(te->desc, "TABLE") == 0 ||
index fb08e6bb8ef1eb53906ab7e3b9866f833ee2e9bb..b21fd263b07a5d1ce273fb22776ee871af3c01a2 100644 (file)
@@ -85,6 +85,7 @@ main(int argc, char **argv)
                {"data-only", 0, NULL, 'a'},
                {"dbname", 1, NULL, 'd'},
                {"exit-on-error", 0, NULL, 'e'},
+               {"exclude-schema", 1, NULL, 'N'},
                {"file", 1, NULL, 'f'},
                {"format", 1, NULL, 'F'},
                {"function", 1, NULL, 'P'},
@@ -148,7 +149,7 @@ main(int argc, char **argv)
                }
        }
 
-       while ((c = getopt_long(argc, argv, "acCd:ef:F:h:I:j:lL:n:Op:P:RsS:t:T:U:vwWx1",
+       while ((c = getopt_long(argc, argv, "acCd:ef:F:h:I:j:lL:n:N:Op:P:RsS:t:T:U:vwWx1",
                                                        cmdopts, NULL)) != -1)
        {
                switch (c)
@@ -196,6 +197,10 @@ main(int argc, char **argv)
                                simple_string_list_append(&opts->schemaNames, optarg);
                                break;
 
+                       case 'N':                       /* Do not dump data for this schema */
+                               simple_string_list_append(&opts->schemaExcludeNames, optarg);
+                               break;
+
                        case 'O':
                                opts->noOwner = 1;
                                break;
@@ -456,6 +461,7 @@ usage(const char *progname)
        printf(_("  -L, --use-list=FILENAME      use table of contents from this file for\n"
                         "                               selecting/ordering output\n"));
        printf(_("  -n, --schema=NAME            restore only objects in this schema\n"));
+       printf(_("  -N, --exclude-schema=NAME    do not restore objects in this schema\n"));
        printf(_("  -O, --no-owner               skip restoration of object ownership\n"));
        printf(_("  -P, --function=NAME(args)    restore named function\n"));
        printf(_("  -s, --schema-only            restore only the schema, no data\n"));